社区
网络编程
帖子详情
认为自己真正了解TCP的高手请进
SuperKick
2003-11-17 06:37:09
我在做一个基于TCP的数据传输程序,我现在遇到的问题是有时候接收到的数据有错。所以请教各位高手:我发一个包A(大小<2k)接收端收到的一定是A吗?我用的是CAsyncSocket,在OnReceive中开始接收数据。
...全文
32
12
打赏
收藏
认为自己真正了解TCP的高手请进
我在做一个基于TCP的数据传输程序,我现在遇到的问题是有时候接收到的数据有错。所以请教各位高手:我发一个包A(大小<2k)接收端收到的一定是A吗?我用的是CAsyncSocket,在OnReceive中开始接收数据。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
自己顶...
40 张图带你搞懂
TCP
和 UDP
我上面只是简单提到了一下 TIME-WAIT 状态和 2MSL 是啥,下面来聊一下这两个概念。MSL是
TCP
报文段可以存活或者驻留在网络中的最长时间。RFC 793 定义了 MSL 的时间是两分钟,但是具体的实现还要根据程序员来指定,一些实现采用了 30 秒的这个最大存活时间。那么为什么要等待2MSL呢?主要是因为两个理由为了保证最后一个响应能够到达服务器,因为在计算机网络中,最后一个 ACK 报文段可能会丢失,从而致使客户端一直处于LAST-ACK状态等待客户端响应。这时候服务器会重传一次。
深入理解网络通信和
TCP
、IP协议-01
首部的结构由协议的具体规范详细定义。在数据发送的过程中,如果用一个固定的值一直作为超时计时器的 时长是非常不经济也非常不准确的方法,这样的话,超时的时长就需要根据网络情况动态调 整,就需要采样统计一个数据包从发送端发送出去到接收到这个包的回复这段时长来动态设 置重传超时值,这个时长就是为 RTT。的主要目的是支持高速广域网上的海量数据传 输,最典型的例子就是建立在光纤广域网上的网格计算,一些研究所在这样的网 络上运行他们的分布式的数据密集程式,例如,远程访问仪器、分布式数据挖掘 和高分辨率的多媒体流。
真正的
高手
,都在培养系统
本文授权转载自公众号"大华嘻游",作者大华大部分人可能从来没有总结梳理过自己的知识和经验,但往往在实际做事情的过程中都遵循一套科学的方法和逻辑。在现实生活中我们经常会遇见...
如何成为编程
高手
如何成为编程
高手
第一阶段此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。第二阶段此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。第三阶段此阶段能深入地
了解
某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有
程序员修炼指南——引导你成为真正的编程
高手
前言你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?
网络编程
18,357
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章