C++ Socket编程高手进 20
我现在编一个socketd的TCP多线程C/S的程序,服务端每接受连接请求后都开启一个接收线程,设置了一个1024字节的缓冲区,调用recv函数接收数据。但是每次收到数据...
我现在编一个socketd的TCP多线程C/S的程序,服务端每接受连接请求后都开启一个接收线程,设置了一个1024字节的缓冲区,调用recv函数接收数据。但是每次收到数据后,recv的返回值总是1024,查阅msdn,recv的返回值即表示接收的数据字节数。可是我每次发送的数据都是十几个字节,得到的值应该是十几才对。怎么可能是得到的返回值是1024呢?而且不管我发送的数据有多长,这个返回值一直都是1024。后来我采用CSocket类的函数Send,Receive得到的值依然是1024,始终不理解这是为什么,快要疯了。求高手帮忙。。。。。。。。。。。。
UINT TCPRecvThread(LPVOID lParam)
{
CLIENT* pClient=(CLIENT*)lParam;
char buff[1024];
int nRec=SOCKET_ERROR;
for(;;)
{
if((nRec=recv(pClient->sockfd,buff,sizeof(buff),0))==0)
{
AfxMessageBox("Receive failed");
return -1;
}
AfxMessageBox(buff);
memset(buff,0,1024);
}
if(buff[0]=='#')
break;
}
delete []buff;
return 1;
}
拜托回答的人专业一点好不?提供的答案明显不靠谱,当我是傻瓜?MSDN没看过就在瞎答,不知道就别回答,浪费时间。。。。 展开
UINT TCPRecvThread(LPVOID lParam)
{
CLIENT* pClient=(CLIENT*)lParam;
char buff[1024];
int nRec=SOCKET_ERROR;
for(;;)
{
if((nRec=recv(pClient->sockfd,buff,sizeof(buff),0))==0)
{
AfxMessageBox("Receive failed");
return -1;
}
AfxMessageBox(buff);
memset(buff,0,1024);
}
if(buff[0]=='#')
break;
}
delete []buff;
return 1;
}
拜托回答的人专业一点好不?提供的答案明显不靠谱,当我是傻瓜?MSDN没看过就在瞎答,不知道就别回答,浪费时间。。。。 展开
展开全部
没记错的话,recv函数应该是接收指定长度的字节,也就是你程序中的sizeof(buff),1024。
一般的做法是先传送一个int行的数据,标明后面将传送多少字节。
大概就是这个意思。
int size;
recv(pClient->sockfd,&size,sizeof(size),0))
char *pbuffer = new char[size];
recv(pClient->sockfd,pbuffer ,size,0))
一般的做法是先传送一个int行的数据,标明后面将传送多少字节。
大概就是这个意思。
int size;
recv(pClient->sockfd,&size,sizeof(size),0))
char *pbuffer = new char[size];
recv(pClient->sockfd,pbuffer ,size,0))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char buff[1024];
...
delete []buff;
你是怎么想的?堆区、栈区别搞混了。
socket创建的时候参数对吗?检查返回值是个好习惯
==============================================
楼上的recv用法不对吧?
...
delete []buff;
你是怎么想的?堆区、栈区别搞混了。
socket创建的时候参数对吗?检查返回值是个好习惯
==============================================
楼上的recv用法不对吧?
参考资料: http://www.sockets.com/winsock.htm#Recv
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CLIENT* pClient=(CLIENT*)lParam;
char buff[1024];
后面加上这句
memset(buff,0,1024);
char buff[1024];
后面加上这句
memset(buff,0,1024);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询