欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于使用tcp协议的有关问题

更新时间: 2014-01-05 03:14:53 责任编辑: Author_N1

 

关于使用TCP协议的问题
用GPRS连接internet,给后台服务器发送图片,图片大小在100K以内,用TCP协议传输,由于GPRS模块每次发送的数据在2K以内,所以采用分包发送。我在图片数组前添加拍摄图片的时间和图片长度。
我想问的是,100K的数据量,在使用TCP传输时,会不会丢包?分包发送时,需要为每个包再另外加包头吗?包头里添加整个图片的大小,每个包的数据长度信息。怎么样才能保证TCP传输不丢包?
--参考方法--
分包发送,每包加上引导头、发送序号和校验和,接收端接收后回传。这样做比较保险


--参考方法--
如果是移植的tcp协议栈,使用上层API,那么里面的细节部分就不用考虑了。直接把人为分包的数据作为参数传进去,那么收到的就是正确的数据。如果担心中途网络有问题,是指环境问题或者链接问题。可以为每个包再加包头,添加包序列号参数、数据长度等。在收数据的时候检查这些参数。添加重传机制,或者最后再来个数据校验,这样应该能保证传输的正确性。
100%的保证,我觉得是人为实现的高可靠性的表现。
--参考方法--
udp不能识别网络状态吧。
我用过网线,tcp面向连接,如果握手不成功是不会建立连接的。而且以太网控制器可以识别物理链路断开。udp就不管连接是否建立,不管对方的网络是否正常,udp只负责向设定的ip地址和端口发送。
若使用udp自己加上应答报文的话,即发一包,对方给一包应答,也可以完成这个过程。

楼主为什么会局的使用UDP会更好些?
--参考方法--
引用:
Quote: 引用:

udp不能识别网络状态吧。
我用过网线,tcp面向连接,如果握手不成功是不会建立连接的。而且以太网控制器可以识别物理链路断开。udp就不管连接是否建立,不管对方的网络是否正常,udp只负责向设定的ip地址和端口发送。
若使用udp自己加上应答报文的话,即发一包,对方给一包应答,也可以完成这个过程。

楼主为什么会局的使用UDP会更好些?

既然要为每个包添加包头,UDP本身的结构不是更简单些?


我的意思是添加包头不是在协议栈内部添加,而是把包头也作为应用层数据的一部分。协议内部的结构最好别动它。如果对协议栈比较熟悉,可以改动。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:53
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20064/
本文WWW.DOC100.NET DOC100.NET版权所有。