UDP协议的两个主要方法sendto和recvfrom详解
来源:互联网 发布:程序员技术博客 编辑:程序博客网 时间:2024/05/16 09:55
UDP协议的两个主要方法sendto和recvfrom详解
(2010-04-27 10:50:38)转载▼
标签:
socket
udp
分类: socketsendto()
简述:
向一指定目的地发送数据。
#include <winsock.h>
int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,
const struct sockaddr FAR* to, int tolen);
s:一个标识套接口的描述字。
buf:包含待发送数据的缓冲区。
len:buf缓冲区中数据的长度。
flags:调用方式标志位。
to:(可选)指针,指向目的套接口的地址。
tolen:to所指地址的长度。
注释:
sendto()适用于已连接的数据报或流式套接口发送数据。对于数据报类套接口,必需注意发送数据长度不应超过通讯子网的IP包最大长度。IP包最大长度在WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。如果数据太长无法自动通过下层协议,则返回WSAEMSGSIZE错误,数据不会被发送。
请注意成功地完成sendto()调用并不意味着数据传送到达。
sendto()函数主要用于SOCK_DGRAM类型套接口向to参数指定端的套接口发送数据报。对于SOCK_STREAM类型套接口,to和tolen参数被忽略;这种情况下sendto()等价于send()。
为了发送广播数据(仅适用于SOCK_DGRAM),in参数所含地址应该把特定的IP地址INADDR_BROADCAST(winsock.h中有定义)和终端地址结合起来构造。通常建议一个广播数据报的大小不要大到以致产生碎片,也就是说数据报的数据部分(包括头)不超过512字节。
如果传送系统的缓冲区空间不够保存需传送的数据,除非套接口处于非阻塞I/O方式,否则sendto()将阻塞。对于非阻塞SOCK_STREAM类型的套接口,实际写的数据数目可能在1到所需大小之间,其值取决于本地和远端主机的缓冲区大小。可用select()调用来确定何时能够进一步发送数据。
在相关套接口的选项之上,还可通过标志位flag来影响函数的执行方式。也就是说,本函数的语义既取决于套接口的选项也取决于标志位。后者由以下一些值组成:
值 意义
MSG_DONTROUTE 指明数据不选径。一个WINDOWS套接口供应商可以忽略此标志;参见2.4节中关于SO_DONTROUTE的讨论。
MSG_OOB 发送带外数据(仅适用于SO_STREAM;参见2.2.3节)。
返回值:
若无错误发生,send()返回所发送数据的总数(请注意这个数字可能小于len中所规定的大小)。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。
注释:
值
MSG_DONTROUTE
MSG_OOB
返回值:
recvfrom()
简述:注释:
返回值:
0 0
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- UDP协议的两个主要方法sendto和recvfrom详解
- (转)UDP协议的两个主要方法sendto和recvfrom详解
- [转]UDP协议的两个主要方法sendto和recvfrom详解
- UDP sendto和recvfrom使用详解
- UDP sendto和recvfrom使用详解
- UDP sendto和recvfrom使用详解
- UDP sendto和recvfrom使用详解
- UDP sendto和recvfrom使用
- 一个酷炫的对话框
- poj 2752 kmp(next数组的应用)
- Async Programming - 1 async-await 糖的本质(1)
- PS经典教程:从零开始设计一个漂亮的网页
- 【偶遇的知识点】documentElement
- UDP协议的两个主要方法sendto和recvfrom详解
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- matlab 矩阵数值比较总结
- 关于Request.Form的实验
- uboot中语句__asm__ __volatile__("": : :"memory");理解
- 借助WinDriver认识Windows PCIE设备的空间结构
- iOS 网络编程之TCP/IP <二> 框架的二次封装
- POJ 3618
- leetcode.304. Range Sum Query 2D - Immutable