帮忙看看一个小问题!

chinadragonss 2004-07-09 10:43:00
接收端:
char szBuff[256];
int ret;
while(1)
{
ret = recv(sock,szBuff,256,0);
if (ret == 0)
break;
else if (ret == SOCKET_ERROR)
{
printf("recv error %d\n", WSAGetLastError());
break;
}
szBuff[ret] = '\0';
printf("RECV: '%s' \n",szBuff);
}
return 0;
}


发送端:
strcpy(szMessage,"hello,nice to see you!");
for (i = 0;i < 20;i++)
{
ret =send(sClient,szMessage,strlen(szMessage),0);
if (ret == 0)
break;
else if (ret == SOCKET_ERROR)
{
printf("send error");
break;
}
printf("Send %d bytes\n",ret);
}

为何接收端总会把前几个“hello,nice to see you!”连在一起。而接下来得都是
显示正确的。
即结果是:
RECV:'hello,nice to see you!hello,nice to see you!hello,nice to see you!'
RECV:'hello,nice to see you!'
RECV:'hello,nice to see you!'
RECV:'hello,nice to see you!'
RECV:'hello,nice to see you!'
.
.
.
...全文
122 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
PiggyXP 2004-07-14
  • 打赏
  • 举报
回复
怎么会不知道长度呢?

发送端总会知道要发送的字符的长度的啊,发给接收端就OK了:)
chinadragonss 2004-07-12
  • 打赏
  • 举报
回复
老大们,还是没有解决阿。把接收缓冲区的长度设为strlen(szMessage),倒是能得到结果,
可是万一不知道这个长度怎么办啊。老大们,该如何改啊!!!急啊!!
sailor_2002 2004-07-09
  • 打赏
  • 举报
回复
你可以把接收缓冲区的长度设为strlen(szMessage),因为tcp是面向连接的,你可能几次send,而一次recv就可以了
PiggyXP 2004-07-09
  • 打赏
  • 举报
回复
是的,前一阵子学了个字叫“粘包问题”呵呵^_^

其实要这样发送的话,最好是在发送每串字符前面都加上一个字节的代表数据长度的数字

你可以这样发

send(sClient,"20hello,nice to see you!");

读取的时候先读取长度,然后根据长度接收20长度的字符

chinadragonss 2004-07-09
  • 打赏
  • 举报
回复
那请帮我把接收端改一改。多谢。
PiggyXP 2004-07-09
  • 打赏
  • 举报
回复
我想可能只是因为你的网络环境导致碰巧对了吧

但是无论怎样你这样的代码都是有问题的
chinadragonss 2004-07-09
  • 打赏
  • 举报
回复
而且为何后面的显示有全都是正确的呢。
chinadragonss 2004-07-09
  • 打赏
  • 举报
回复
To; PiggyXP(【小猪】●你快乐于是我快乐)

如果按 sailor_2002(我心依旧) 可能几次send,而一次recv就可以了。
那么接受端怎么分析呢。岂不是任意多小串都连成一长串。
PiggyXP 2004-07-09
  • 打赏
  • 举报
回复
你可以把接收缓冲区的长度设为strlen(szMessage)

==================================================================

那请问在接收端如何能得知发送的端的strlen(szMessage)呢??
chinadragonss 2004-07-09
  • 打赏
  • 举报
回复
多谢,多谢。有空交流.

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧