关于TCP粘包和半包的处理

今日,在编程过程中需要在局域网内不同的电脑间传输文件,遇到了TCP协议的粘包和半包现象。经过思考和借鉴,找到了一个比较好的解决方法。因为在传输文件时要先传输文件名和文件大小,然后再传输文件,所以电脑间的应用程序实现了一个小的协议。这个协议需要解码TCP传输的内容。在有粘包和半包的现象时,会发现有时候文件名和大小以及文件内容混在了一块,有时候,文件内容没有传完,就显示接收到的数据包已经小于设定的缓冲区长度了。

         解决办法,协议不变,将发送和接受的数据设为定长的一帧帧的数据,比如1024个字节,比如文件名和文件大小需要先传,虽然内容不满1024个字节,但通过增加特定字符,使内容填满一个1024的帧,然后发送;文件内容传输的时候也是一1024个字节为一个发送帧大小,文件末尾不足1024个字节时,也用字符将1024个字节填满,然后发出。接收端按照1024个字节的帧大小提取每一帧。在开始接受到的第一帧中提取文件名和文件大小,然后继续接受文件内容,并利用第一帧获得的文件大小来判断是否该结束写入,应写入多少字节。

         通过这个办法,较好的解决了TCP协议粘包和半包的问题。这个方法最关键的一点就是发送方和接受方使用相同的帧长,这样就把问题解决了。这个解决方法比较简单一些,容易实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值