龙空技术网

socket编程【使用recv函数和send函数】

coder人生 61

前言:

目前朋友们对“socket send返回1”大致比较关心,我们都需要知道一些“socket send返回1”的相关资讯。那么小编在网摘上收集了一些关于“socket send返回1””的相关资讯,希望各位老铁们能喜欢,看官们快快来了解一下吧!

recv函数用于socket通信中接收消息,接口定义如下:

int recv(SOCKET s, char* buf, int buflen, int flags);

参数1:指定接收端套接字描述符

参数2:指向一个缓冲区,该缓冲区用来存放recv函数接收到的数据

参数3:指明buf的长度

参数4:一般设置为0

返回值:失败时,返回值小于0,超时或对端主动关闭 返回值等于0,成功时返回值是返回接收数据的长度。

send函数用于socket通信中发送消息,接口定义如下:

int send(SOCKET s, const char* buf, int len, int flags)

参数1:指定发送端套接字描述符

参数2:指明一个存放应用程序要发送数据的缓冲区

参数3:指明实际要发送的数据的字节数

参数4:一般设置为0

返回值:失败时,返回值小于0,超时或对端主动关闭返回值等于0,成功时返回发送数据的长度

一般通信的报文格式:报文头+报文体 针对这种格式的报文怎么处理最合适?

巧用while + recv

1.先接收报文头,直到接收报文的长度和定义的报文头长度相同

2.接收报文体,直到收到的报文长度和报文体长度相同

int nAlready = 0;int nHeadLen = HEAD_LEN;char* buf[HEAD_LEN] = {0x0};while(nAlready < nHeadLen){	int nResult = recv(s, buf + nAlready, nHeadLen - nAlready, 0);	if (nResult <= 0)	{	   //	}	nAlready += nResult;}

报文头的接收方式和报文的接收方式相同。

巧用 while + send

和while + recv类似 不同的是发送的时候不区分报文头和报文体

while(nAlready < pkgLen){	nResult = send(s, buf + nAlready, pkgLen - nAlready, 0);	if (nResult <= 0)	{		//	}	nAlready += nResult;}

标签: #socket send返回1 #socket send返回值1 #socket send 返回值 #socket send 返回0 #socket send 返回1