信息Send后,按顺序存放在接收端的Received Buffer中,当你使用Receive时,socket会从Received Buffer中读出所指定大小的数据;当Send多条信息后,接收端使用Receive时,可能会读出多个信息的内容。有两个方法解决:
一、发送及接收的信息的长度固定。
二、定义数据包结构,如:包头+包体 ,即信息开头(包头)的几个字符说明包体的长度,包体紧跟包头。读信息时先读出包头,再根据包头中指定的长度读取包体。注:方法一 简单,不灵活。
方法二 稍复杂,结构灵活,实用性大。
一、发送及接收的信息的长度固定。
二、定义数据包结构,如:包头+包体 ,即信息开头(包头)的几个字符说明包体的长度,包体紧跟包头。读信息时先读出包头,再根据包头中指定的长度读取包体。注:方法一 简单,不灵活。
方法二 稍复杂,结构灵活,实用性大。
解决方案 »
- 如何在openH323中添加H.264相应的能力
- 下面这个爆破3389的工具 他使用哪个函数来判断用户名密码是正确的? WNetAddConnection2 还是 WNetAddConnection3 还是其它的?
- ShellExecute 怎么捕捉到控制台的输出信息?
- 在MFC自动生成的单文档里,修改默认菜单不能响应?
- ActiveX控件的显示问题!
- 请教一个很简单的问题,谢谢,在线等
- 如何使程序安全退出?
- 用ATL开发数据库组件(ADO)
- col = dlg.GetColor(); --->col应该定义成什么数据类型了???
- 汇编实现电子表-------???!!!
- 弱智问题,高分求救!!
- 如何找到一些不常用的头文件
strlen(pMsg)
To
strlen(pMsg) + 1
发到缓冲区的数据不及时读出并不会被覆盖!!TCP协议保证了数据的完整性.
另外,TCP协议是基于流的传输协议, 不分各个信息数据包的边界. 如果你需要区分数据包边界, 可以选用UDP面向无连接的传输协议, 如果是在局域网的话.
哪位大侠给解释一下,谢了。
不好意思,我后来发现用你的方法不太稳定,时灵时不灵的,所以我还是采用了zhq2000(俗子)的方法二。