首页 > 其他 > 详细

tcp解决粘包

时间:2021-01-18 19:55:11      阅读:38      评论:0      收藏:0      [点我收藏+]

tcp客户端

  from socket import *
  import struct
  import json

  client = socket(AF_INET,SOCK_STREAM)
  client.connect((‘127.0.0.1‘,8080))
  
  while True:
      cmd = input(‘请输入你的命令?:‘).strip()
      if len(cmd) == 0:
          continue
      client.send(cmd.encode(‘utf-8‘))

      header_bytes_len = struct.unpack(‘i‘,client.recv(4))[0]

      header_bytes = client.recv(header_bytes_len)
      header_json = header_bytes.decode(‘utf-8‘)
      header_dic = json.loads(header_json)

      print(header_dic)
      total_size = header_dic[‘total_size‘]

      recv_size = 0
      res = b‘‘
      while recv_size < total_size:
          data = client.recv(1024)
          recv_size += len(data)
          res += data
      print(res.decode(‘gbk‘))

tcp服务端

  from socket import *
  from subprocess import Popen,PIPE
  import struct
  import json

  server = socket(AF_INET,SOCK_STREAM)
  server.bind((‘127.0.0.1‘,8080))
  server.listen(5)

  while True:
      conn,client_addr = server.accept()
      while True:
          try:
              cmd = conn.recv(8096)
              if len(cmd) == 0: break
              obj = Popen(cmd.decode(‘utf-8‘),
                          shell = True,
                          stderr= PIPE,
                          stdout= PIPE,
                          )      
              res1 = obj.stdout.read()
              res2 = obj.stderr.read()

              header_dic = {
                  ‘filename‘: ‘a.txt‘,
                  ‘total_size‘: len(res1)+len(res2),
                  ‘md5‘: ‘天王盖地虎‘
              }
  
              header_json = json.dumps(header_dic)
              header_bytes = header_json.encode(‘utf-8‘)
              conn.send(struct.pack(‘i‘,len(header_bytes)))
              conn.send(header_bytes)

              conn.send(res1)
              conn.send(res2)
          except Exception:
              break
      conn.close()

tcp解决粘包

原文:https://www.cnblogs.com/liuyang521/p/14294513.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!