当前位置: 代码迷 >> 单片机 >> 关于使用TCP协议的有关问题
  详细解决方案

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

热度:68   发布时间:2016-04-28 15:15:56.0
关于使用TCP协议的问题
用GPRS连接internet,给后台服务器发送图片,图片大小在100K以内,用TCP协议传输,由于GPRS模块每次发送的数据在2K以内,所以采用分包发送。我在图片数组前添加拍摄图片的时间和图片长度。
我想问的是,100K的数据量,在使用TCP传输时,会不会丢包?分包发送时,需要为每个包再另外加包头吗?包头里添加整个图片的大小,每个包的数据长度信息。怎么样才能保证TCP传输不丢包?
tcp gprs 图片

------解决方案--------------------
分包发送,每包加上引导头、发送序号和校验和,接收端接收后回传。这样做比较保险


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

楼主为什么会局的使用UDP会更好些?
------解决方案--------------------
引用:
Quote: 引用:

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

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

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


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