int WSAAPI send( SOCKET s, constchar FAR * buf, int len, int flags ); /*功能:在已建立连接的套接字上发送数据。 参数: 1)s:[输入] 已建立连接的套接字,将在这个套接字上发送数据。 2)buf:[输入] 字符缓冲区,其中包含即将发送的数据。 3)len :[输入]指定即将发送的缓冲区内的字符数。 4)flags:[输入] 可为0 、M S G _ D O N T R O U T E 或M S G _ O O B 。另外,f l a g s 还可以是对那些标志进行按位“或运算”的一个结果。M S G _ D O N T R O U T E 标志要求传送层不要将它发出的包路由出去。由基层的传送决定是否实现这一请求(例如,若传送协议不支持该选项,这一请求就会被忽略)。M S G _ O O B 标志预示数据应该被带外发送。 返回值:返回实际发送的字节数;若发生错误,就返回S O C K E T _ E R R O R 。 */
recv 函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14
int WSAAPI recv( SOCKET s, char FAR * buf, int len, int flags ); /*功能:在已连接套接字上接受数据。 参数: 1) s:[输入]准备接收数据的那个套接字。 2) b u f :[输出]即将收到数据的字符缓冲区。 3) l e n:[输入] 准备接收的字节数或b u f 缓冲的长度。 4) f l a g s :[输入]可以是下面的值:0 、M S G _ P E E K 或M S G _ O O B 。另外,还可对这些标志中的每一个进行按位和运算。当然,0 表示无特殊行为。M S G _ P E E K 会使有用的数据复制到所提供的接收端缓冲内,但是没有从系统缓冲中将它删除。 返回值:返回已接受的字节数。若socket已关闭,则返回0,若出错返回:SOCKET_ERROR。 */
intsendto( SOCKET s, constchar* buf, int len, int flags, conststruct sockaddr* to, int tolen ); /*功能:用于发送一个UDP包。 参数: 1) s:[输入]要发送UDP包的socket。 2) buf:[输入]要发送的数据的缓冲区。 3) len:[输入]要发送的数据的字节数。 4) flags:[输入] 可为0 、M S G _ D O N T R O U T E 或M S G _ O O B 。另外,f l a g s 还可以是对那些标志进行按位“或运算”的一个结果。M S G _ D O N T R O U T E 标志要求传送层不要将它发出的包路由出去。由基层的传送决定是否实现这一请求(例如,若传送协议不支持该选项,这一请求就会被忽略)。M S G _ O O B 标志预示数据应该被带外发送。 5)to:[输入]接受方的IP地址与端口号。 6) tolen:[输入]参数to所指的数据区的大小。 */
3. 接受 UDP 包 recvfrom ()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
intrecvfrom( SOCKET s, char* buf, int len, int flags, struct sockaddr* from, int* fromlen ); /*功能:接受一个UDP包。 参数: 1) s:[输入]准备接收UDP包的那个套接字。 2) b u f :[输出]即将收到数据的字符缓冲区。 3) l e n:[输入] 准备接收的字节数或b u f 缓冲的长度。 4) f l a g s :[输入]可以是下面的值:0 、M S G _ P E E K 或M S G _ O O B 。另外,还可对这些标志中的每一个进行按位和运算。当然,0 表示无特殊行为。M S G _ P E E K 会使有用的数据复制到所提供的接收端缓冲内,但是没有从系统缓冲中将它删除。 5)from:[输出]发送方的地址与端口号。 6) fromlen:[输入]from所指数据区的大小。 */