初学Sockets编程(三) UDP套接字

作者:佚名 上传时间:2019-05-28 版权申诉

UDP的过程通信看上去比TCP简单一些,但也有许多细节需要注意。比如,UDP套接字使用前不必连接,TCP类似于电话通信,UDP类似于邮件通信,UDP套接字就像一个邮箱,可以把许多不同来源的信件或包裹放入其中。因此,在示例UDPEchoClient.c中,是需要用SockAddrsEqual()来检测回送的数据包是否是之前所送往的服务器回送的,尽管在示例中不太可能出现这种情况。

程序使用的地址结构、套接字的创建还是与TCP相差无几。由于没有建立连接的步骤,不需要调用listen(),一旦套接字具有地址就准备好接受消息。同时UDP也不需要使用accept()为每个客户获取一个新的套接字,而是利用绑定到想要端口号的相同套接字立即调用recvfrom()。这样,在接收数据报的同时需要获知起来源。以下是发送和接收用到的函数。

ssize_t sendto(int socket, constvoid*msg, size_t msgLength, int flags, conststruct sockaddr *destAddr, socklen_t addrLen)
//前4个参数与send()相同,另外两个指向消息的目的地
ssize_t recvfrom(int socket, void*msg, size_t msgLength, int flags, struct sockaddr *srcAddr,socklen_t *addrLen)
//前4个参数与recv()相同,另外两个告知调用者所接受的数据报的来源
//addrLen是一个输入/输出型的参数,需要传递一个指针

TCP 调用send()时,数据已经复制进缓冲区中以进行传输,可能不会实际的传输;UDP不会重传,这意味着当其调用sendto()时,就已经把消息传递给底层,并且已经(或者很快将要)发送出去。

UDP对不同消息的字节保留边界,recvfrom()不会返回多个数据块。当参数设定小于第一个数据块大小时,剩余字节将会被丢弃而无指示。因此缓冲区应该大于协议允许的最大消息,其最大负载是65507字节。


UDP 套接字上调用connect()可以用于固定通过套接字发送的将来数据报的目的地址。一旦连接,可以用send()代替sendto()、recv()代替recvfrom(),但这不改变UDP的行为方式。




本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2011/08/05/2129032.html,如需转载请自行联系原作者

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
初学Sockets编程() UDP套接
UDP的过程通信看上去比TCP简单一些,但也有许多细节需要注意。比如,UDP套接字使用前不必连接,TCP类似于电话通信,UDP类似于邮件通信,UDP套接字就像一个邮箱,可以
sockets套接
Sockets (socket)
RAR
0B
2019-06-21 21:32
linux下的UDP套接编程
一.相关过程以及知识请详见我的另一篇博客《winsock套接字编程》,这里不再累述。 二.相关代码:
UDP套接
UDP套接字是网络编程中使用的一种无连接的套接字类型,主要用于无需建立可靠连接、低延迟的数据传输。
zip
18.32KB
2024-05-01 04:59
udp协议编程c#编程套接
用udp协议开发的简单通讯程序,属于套接字,vs2008开发
RAR
913KB
2021-05-03 13:01
UDP套接详解
UDP套接字详解
DOCX
0B
2019-02-26 23:01
UDP套接实例.
UDP套接字实例
DOCX
0B
2019-07-29 16:43
sockets fundamentos套接fundamentos源码
注意: 网络上的电子快件清单和公共服务清单。 重建德意志联邦共和国法院 npm install
ZIP
10KB
2021-02-22 23:08
UDP套接编程C
详细简单 适合初学者的可运行代码服务端创建UDP套接口填充本地地址将套接口与协议地址绑定通信函数:循环处理请求接收请求并获取对方协议地址根据协议地址发送响应信息客户端创建套接口填充服务端地址通信函数
ZIP
0B
2018-12-25 20:26
基本UDP套接编程
概述 UDP 无连接的 connectionless不可靠的 unreliable数据报协议 datagram 应用:DNS, NFS, SNMP, ICQ TCP 面向连接的 connection-
TXT
8KB
2020-09-20 03:07