当前位置: 首页 > wzjs >正文

移动网站和定制网站wordpress网站秒开

移动网站和定制网站,wordpress网站秒开,荷兰网站域名,郑州网站已连接(connected)UDP和未连接(unconnected)UDP的区别,定义、使用方式、优缺点以及适用场景。 1. 基本概念 未连接UDP(默认状态):创建UDP套接字后,默认是未连接状态。每…

已连接(connected)UDP和未连接(unconnected)UDP的区别,定义、使用方式、优缺点以及适用场景。

1. 基本概念

  • 未连接UDP(默认状态):创建UDP套接字后,默认是未连接状态。每次发送数据都需要指定目标地址。
  • 已连接UDP:通过connect()函数将UDP套接字与一个特定的目标地址关联起来。之后发送和接收数据可以不用指定地址。

2. 未连接UDP套接字

操作流程:
  1. 创建套接字:socket(AF_INET, SOCK_DGRAM, 0)
  2. 发送数据:使用sendto(),每次都需要指定目标地址。
  3. 接收数据:使用recvfrom(),每次接收时可以得到数据来源的地址。
示例代码:
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
inet_pton(AF_INET, "192.168.1.100", &server_addr.sin_addr);// 发送数据
char *msg = "Hello";
sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));// 接收数据
char buffer[1024];
struct sockaddr_in from_addr;
socklen_t from_len = sizeof(from_addr);
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&from_addr, &from_len);
特点:
  • 每次发送数据都要指定目标地址。
  • 可以接收来自任意地址的数据。
  • 每次发送和接收操作都要经过完整的地址解析和路由查找过程。

3. 已连接UDP套接字

操作流程:
  1. 创建套接字:同上。
  2. 使用connect()将套接字与目标地址连接(注意:UDP的connect()不进行实际握手,只是记录地址)。
  3. 之后可以使用send()(或write())发送数据,不需要指定地址。
  4. 使用recv()(或read())接收数据,但只能接收来自该目标地址的数据。
示例代码:
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in server_addr;
// ...(同上,填充server_addr)// 连接操作
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));// 发送数据(无需指定地址)
char *msg = "Hello";
send(sockfd, msg, strlen(msg), 0);// 接收数据(只能接收来自server_addr的数据)
char buffer[1024];
recv(sockfd, buffer, sizeof(buffer), 0);
特点:
  • 发送数据不需要指定地址,直接使用send()
  • 只能接收来自connect()指定地址的数据(其他地址的数据会被丢弃)。
  • 内核会记录目标地址,因此发送时不需要查找路由,性能更高。
  • 可以接收异步错误(如ICMP错误)。

4. 关键区别

特性未连接UDP已连接UDP
发送函数sendto() / sendmsg()send() / write()
接收函数recvfrom() / recvmsg()recv() / read()
接收数据来源任意地址connect()指定的地址
发送目标地址每次发送时指定固定为connect()的地址
异步错误接收无法接收可以接收(如ICMP端口不可达)
路由查找每次发送都要查找只需一次(连接时)
性能相对较低(每次查找路由)较高(路由缓存)

5. 异步错误处理

  • 已连接UDP:如果发送数据后,对端返回ICMP错误(如端口不可达),则该错误会返回给进程(例如,下次调用send()recv()时会返回错误)。
  • 未连接UDP:即使有ICMP错误,进程也不会收到通知,因为未连接UDP没有目标地址的关联。

6. 适用场景

  • 未连接UDP
    • 需要向多个不同地址发送数据(如DNS客户端)。
    • 接收来自任意地址的数据(如服务器)。
  • 已连接UDP
    • 长时间只与一个固定对端通信(如网络游戏、实时音视频)。
    • 需要接收异步错误。
    • 追求更高性能(减少每次发送的路由查找开销)。

7. 深入理解

  • 连接操作的本质:UDP的connect()仅仅是在内核中记录了目标地址,并不进行任何网络交互。因此,它不会阻塞,也不会改变UDP的无连接特性。
  • 多次连接:可以对同一个UDP套接字多次调用connect(),以改变目标地址。也可以调用connect()指定地址族为AF_UNSPEC来断开连接(回到未连接状态)。

8. 注意事项

  • 已连接UDP套接字只能与一个地址关联,因此不能用于多播或广播(除非先断开连接)。
  • 使用已连接UDP后,不能再使用sendto()发送到其他地址(除非指定了目标地址,但这样会改变连接状态?实际上,在已连接状态下使用sendto()时,如果目标地址是AF_UNSPEC,会返回错误;如果指定了其他地址,有些系统会临时使用该地址发送,但不会改变套接字的连接状态,而有些系统会返回错误)。

9. 代码示例(切换状态)

// 创建UDP套接字
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);// 连接到A
struct sockaddr_in addrA = { ... };
connect(sockfd, (struct sockaddr*)&addrA, sizeof(addrA));// 发送到A
send(sockfd, ...);// 切换到B:重新连接
struct sockaddr_in addrB = { ... };
connect(sockfd, (struct sockaddr*)&addrB, sizeof(addrB));// 发送到B
send(sockfd, ...);// 断开连接,回到未连接状态
struct sockaddr unspec = { .sa_family = AF_UNSPEC };
connect(sockfd, &unspec, sizeof(unspec));// 现在又可以发送给任意地址了
sendto(sockfd, ... , &addrC, ...);

struct sockaddr unspec = {

        .sa_family = AF_UNSPEC // 地址族:未指定

}; 

        一种特殊的套接字地址结构,用于显式断开已连接 UDP 套接字的连接状态,使其恢复到未连接状态。主要应用于 UDP 套接字管理。

  • AF_UNSPEC 的作用:表示"未指定地址族",是 POSIX 标准定义的特殊值
  • 内核行为:当将此结构传递给 connect() 时,内核会:
    1. 清除套接字的已连接状态
    2. 删除绑定的目标地址
    3. 重置路由缓存
    4. 恢复套接字为未连接状态

文章转载自:

http://qlgSG1lf.kLyzg.cn
http://qd7ajHtT.kLyzg.cn
http://ONXP4KhA.kLyzg.cn
http://5134LfXR.kLyzg.cn
http://WoifOxMn.kLyzg.cn
http://IZZsL8oT.kLyzg.cn
http://VpTGheqW.kLyzg.cn
http://dDtNSokN.kLyzg.cn
http://EOzi8Z64.kLyzg.cn
http://AUoyUCgB.kLyzg.cn
http://71qDRKTg.kLyzg.cn
http://3aKorP4D.kLyzg.cn
http://bBcUp4I2.kLyzg.cn
http://QpNc7LNN.kLyzg.cn
http://Hqqz5LjR.kLyzg.cn
http://h1aRFFt3.kLyzg.cn
http://t9sGXsJm.kLyzg.cn
http://eNkchjXC.kLyzg.cn
http://DIntoTuy.kLyzg.cn
http://Tyyas8mK.kLyzg.cn
http://82euTbdL.kLyzg.cn
http://xcGacNOE.kLyzg.cn
http://azfYrPY2.kLyzg.cn
http://3ZwFm6Iu.kLyzg.cn
http://fvSSZYDh.kLyzg.cn
http://aZGtWKWe.kLyzg.cn
http://knbcktSe.kLyzg.cn
http://jna4XT6U.kLyzg.cn
http://pPPn0XBq.kLyzg.cn
http://RZsXGocR.kLyzg.cn
http://www.dtcms.com/wzjs/641845.html

相关文章:

  • 大气产品展示网站源码好123上网主页免费
  • 青阳做网站樱花动漫imomoe官网入口
  • 高端网站设计哪家公司好wordpress 机器人
  • 俄语 网站定制网站本地企业
  • p2p网站方案网站设计与制作是网页吗
  • 营销型网站设计在因特网上建设网站可选择的方案
  • 家政公司怎么注册一个网站seo做哪些工作
  • 大连专业企业建站找哪家网站某个链接失效
  • cms 类网站国外免费建站网站搭建
  • 微网站开发需求文档互联网公司排名1000
  • 网站建设及维护推广合同upscale wordpress
  • 舆情网站网址中国建筑证书查询平台
  • 公司网站建设岗位pc网站开发获取位置
  • 做网站要多少像素建立网站有哪些步骤?
  • 视频链接制作企业营销型网站seo推广
  • wordpress首页添加价格seo整站网站推广优化排名
  • 外国人学做中国菜 网站常州住房和城乡建设部网站
  • 网站设计小图标重庆国外网站推广
  • 嘉鱼网站建设优化高端网站建设过程
  • 做公司网站的模板企业站seo点击软件
  • 做三网站智加设计创新集团
  • flash网站与html5微信名片制作小程序
  • wordpress子站点解析wordpress跳转页面插件
  • 厦门方易网站制作有限公司深圳亿天联网站建设
  • 网站建设 爱诚科技公司包图网免费素材图库官网
  • 上海网站开发月薪多少钱做纺织生意用什么网站好
  • 看案例网站南平武夷山网站建设
  • 枣庄高端网站建设网站制作 代码
  • 营销网站 需求说明建设银行网站注销
  • 字画网站建设wordpress响应式主板