recvfrom()中,接受字符串大小的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 16:32:27
发送部分:
sendto(m_socket,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
接收部分:
char recvbuf[200]; //用于接收数据
int len=sizeof(SOCKADDR);
int value=recvfrom(socket,recvbuf,strlen(recvbuf),0,(SOCKADDR*)&addrFrom,&len);//value为接收到字节数
while(TRUE){
if(value==SOCKET_ERROR)
{
AfxMessageBox("接受数据失败");
break;
}
}

其他代码略过
出现的问题是这样的:当我第一次发送数据,比如为“1111”时,数据接收正常。控件里正常显示接收的数据。
当我再一次发送数据时,显示“数据接受失败”,后来查出错误代号10040,也就是说接收的缓冲区大小不够。
当我把strlen(recvbuf)+1时,数据均可以正常接收显示。

为什么会出现这样的情况呢?DEBUG了后,发现recvbuf里的字符也正是我输入的字符,而且结尾是"\0"
写错了一个地方,如果把strlen(recvbuf)改成200,数据均可以正常接收显示

sizeof可以是可以的。就是想不通,为什么strlen()不可以,况且strlen()本来就是用来计算字符大小的,recvbuf也正好是字符串啊

在执行
recvfrom(socket,recvbuf,strlen(recvbuf),0,(SOCKADDR*)&addrFrom,&len);
之前,recvbuf里面的值根本还不确定,strlen(recvbuf)怎么会计算得对呢

recvfrom(socket,recvbuf,strlen(recvbuf),0,(SOCKADDR*)&addrFrom,&len)

中的strlen(recvbuf)用错了吧,改用sizeof(recvbuf)