码迷,mamicode.com
首页 > 其他好文 > 详细

TCP通信数据接收栈实现

时间:2014-10-25 16:01:34      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:style   ar   使用   for   sp   数据   on   问题   代码   

    很惭愧TCP/IP协议卷一还没有看完,实在是毅力问题。

    在使用TCP的时候一向怀疑数据是否能够完整接受,先发送一个"hello"字符串后再发送一个“world”字符串,可能就会在你不知道的时候底层开始进行包的重组,重组成

"hellowo"和"rld"两个字符串。特别是在数据发送频繁,和网络延时的时候.如果你在接受方直接recv()缓冲区所有数据的时候,这种情况尤为常见。

   我的解决方法是在程序内部使用一个栈区来解决这个问题,当每当socket缓冲区有数据的时候就将数据入栈,然后通过判断栈的长度或者栈中数据来判断是否完整接受了一次数据。如果栈中有了一个完整了发送方发送的数据(这个前提是双方协定好每次数据的固定长度)那么就将栈底的这些数据读取,然后重新排列一下栈区。  

python描述 

while True:
  ...
  ...
  receive=currentarmsocket.recv(1024)
  for i in receive:
    stack.append(i)
  if len(stack)<8:
    continue
  if len(stack)>10240:
    stack=list()
    break
  receive=stack[0:8]
  stack=stack[8:(len(stack)-8)]
  ...
  ...

上面这段代码能够很好地工作,然后保证到达地下的receive是一个完整的来自发送方发送的数据。



TCP通信数据接收栈实现

标签:style   ar   使用   for   sp   数据   on   问题   代码   

原文地址:http://my.oschina.net/000quanwei/blog/337230

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!