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没看过就在瞎答,不知道就别回答,浪费时间。。。。
展开
 我来答
ydnhwan
2010-12-05 · TA获得超过443个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:320万
展开全部
没记错的话,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))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
板唱Z9
2010-12-05 · TA获得超过1426个赞
知道小有建树答主
回答量:578
采纳率:100%
帮助的人:0
展开全部
char buff[1024];
...
delete []buff;
你是怎么想的?堆区、栈区别搞混了。

socket创建的时候参数对吗?检查返回值是个好习惯

==============================================
楼上的recv用法不对吧?

参考资料: http://www.sockets.com/winsock.htm#Recv

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
63的森林
2010-12-05 · 超过15用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:0
展开全部
CLIENT* pClient=(CLIENT*)lParam;
char buff[1024];
后面加上这句
memset(buff,0,1024);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式