在用stream方式流式socket编程,怎样使得一个recv()只接收一个send()发来的数据,谢谢!

soarhigh 2003-12-19 06:01:27
在用stream方式流式socket编程,我在客户端连续调用几次send(),而在服务器端只调用了一次recv(),但是它接收了这几次send()发来的全部数据,而我希望一个recv()只接收一个send()发来的数据,我该怎么办?谢谢!
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stephenland74 2003-12-20
  • 打赏
  • 举报
回复
最好的办法是,在recv端在另行准备一个缓冲区,将每次接受到的数据存入该缓冲区,然后由另外一个线程P,从这个缓冲区中取出,这样作有一个前提就是,发送的数据报文的前几个字节由于本次发送报文的长度,那么P线程便可先按照约定,将msgLen读出,再根据msgLen中提供的长度,将数据从缓冲区中读出,而缓冲区中的后面的数据向前移动即可。
lyzcom 2003-12-20
  • 打赏
  • 举报
回复
最好的办法是使用分段数据包,包发过来以后再将其分解。而不管收到了多少个。
sharkhuang 2003-12-20
  • 打赏
  • 举报
回复
send以后延时啊!或者send以后收到确认再send
soarhigh 2003-12-19
  • 打赏
  • 举报
回复
可是如果按gxxlc(冰良)的指点,会丢数据。
请问,write和read是什么意思?
jian 2003-12-19
  • 打赏
  • 举报
回复
应该是对应的吧,有一个send就有一个recv。改成用write和read试试看呢?
gxxlc 2003-12-19
  • 打赏
  • 举报
回复
控制接收的字节数,比如设置成你发一次的字节数
e.g.:
send(s,buf,10,0)对应的recv(s,buf,10,0)
两头都设置成10,就可以了。然后多调用几次recv,就有可能一次收到一个send了
要确保每次收到的大小都为发送的大小,我建议使用UDP方式,比较好控制。
sevencat 2003-12-19
  • 打赏
  • 举报
回复
不太可能。

18,356

社区成员

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

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