认为自己真正了解TCP的高手请进

SuperKick 2003-11-17 06:37:09
我在做一个基于TCP的数据传输程序,我现在遇到的问题是有时候接收到的数据有错。所以请教各位高手:我发一个包A(大小<2k)接收端收到的一定是A吗?我用的是CAsyncSocket,在OnReceive中开始接收数据。
...全文
32 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyjok 2003-11-26
  • 打赏
  • 举报
回复
用固定头应该没问题,关键是发送端必须保证发送成功(数据发送完整)
SuperKick 2003-11-24
  • 打赏
  • 举报
回复
各位说的都很有道理,我正在改写我的程序,如果没有问题我就结贴了!
raphyer 2003-11-21
  • 打赏
  • 举报
回复
要自己做个RECV循环接收
bswy 2003-11-21
  • 打赏
  • 举报
回复
你要用sleep()当然效率有问题了,应该按hq1978的说法做才行!
因为tcp接收并不是等你发完了才接收,可能有数据它就接收返回,所以你要根据长度来判断你是否完全接收了,没有就要继续接收。
SuperKick 2003-11-21
  • 打赏
  • 举报
回复
我发现TCP的效率有问题,如果你发送一个包头+数据段然后Sleep(200)那么接收端肯定没有问题,但这样效率实在是太低了,各位有什么好的方法??
xkak2 2003-11-20
  • 打赏
  • 举报
回复
如果你对数据的正确性要求很高,就应该自己定义一套应用协议,在发的包头中包含该数据包的长度,甚至CRC等值。
t0mychen 2003-11-20
  • 打赏
  • 举报
回复
我在做一个基于TCP的数据传输程序,我现在遇到的问题是有时候接收到的数据有错。所以请教各位高手:我发一个包A(大小<2k)接收端收到的一定是A吗?我用的是CAsyncSocket,在OnReceive中开始接收数据。

不是高手,没什么一定不一定的。
出错是难免的,所以在包前面加上/A/这类的标记,等等吧。包里除了你的A还有很多东东,用sniffer跟吧,另跟同步没太大关系吧?
SuperKick 2003-11-20
  • 打赏
  • 举报
回复
再顶...
SuperKick 2003-11-19
  • 打赏
  • 举报
回复
To: chenge1980
能详细讲一下同步头吗?
大脚板 2003-11-18
  • 打赏
  • 举报
回复
同意楼上的,最好还能加上同步头
hq1978 2003-11-17
  • 打赏
  • 举报
回复
如果你是tcp,你发一个包A,接受端调用一次recv收到的不一定是A的全部,你自己要保证包要接受完全,因为tcp是流式的没有边界,你自己在设计包的时候要规定好如何确定一个包的边界,例如在每个包的开始部分加入包的长度,以确保接收端能够识别包的边界。
SuperKick 2003-11-17
  • 打赏
  • 举报
回复
自己顶...

18,357

社区成员

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

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