请教一个关于CSocket::Send()函数的使用问题

hellolwl 2003-10-20 09:23:57
//这是客户端的部分代码
strReply = "TEST_T_CODE_110000000";
m_pSkClient->Send(strReply,strReply.GetLength());
strReply = "TEST_CMM_R_1";
m_pSkClient->Send(strReply,strReply.GetLength());

然后我在服务器端用MessageBox把收到的消息弹出来,我预期的效果应该是弹出两次,分别显示TEST_T_CODE_110000000和TEST_CMM_R_1,但现在就弹出一次,显示TEST_T_CODE_110000000TEST_CMM_R_1,也就是说把接连两次Send的内容拼在了一起,请问如何解决?
...全文
60 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwedcxza 2003-10-20
  • 打赏
  • 举报
回复
在 TEST_T_CODE_110000000TEST 之后,send 一个标识符,例如 '\n'
在接受方,将接受到的数据按 '\n' 分解成两部分
leon_z 2003-10-20
  • 打赏
  • 举报
回复
好象是Client 与 Server 在同一台机器上才会出这个问题吧

hellolwl 2003-10-20
  • 打赏
  • 举报
回复
期待着强制刷新缓冲区的方法
hellolwl 2003-10-20
  • 打赏
  • 举报
回复
Sleep(200)没用啊,Sleep(20000)我试了都没用,怎么回事?
xieyongqiang 2003-10-20
  • 打赏
  • 举报
回复
楼上,CounterHack(反击黑客)正解,在 《TCP/IP详解 卷一 协议》中,第19章,TCP的交互数据流中,当一个方向有多个小数据包发送时,200毫秒中的数据会合成一个大包一起发送,以避免网络上大量小数据包的发送降低网络的利用率。
hellolwl 2003-10-20
  • 打赏
  • 举报
回复
请问CounterHack,怎么刷新发送缓冲区?
CounterHack 2003-10-20
  • 打赏
  • 举报
回复
这是由于两次Send()相隔时间太短,发送数据均填入发送缓冲区中,而系统为了提高通讯效率,一次发送所有数据,将原本2段数据当成1段发出。
可以在两次Send()之间加上Sleep(200),可以简单解决问题,或通过强制Send()后刷新发送缓冲区的方式完成。
qwedcxza(自娱自乐)的方法也可行,但较适合大量数据处理程序。

18,356

社区成员

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

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