zoukankan      html  css  js  c++  java
  • 2、tcp/udp解决粘包

    tcp解决粘包,远程控制

    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()
    

    udp 简单的多并发

    服务端

      from socket import *
    
      server= socket(AF_INET,SOCK_DGRAM)
      server.bind(('127.0.0.1',9999))
    
      while True:
    
          data,client_addr = server.recvfrom(1024)
          print(data.decode('gbk'))
          server.sendto(data.upper(),client_addr)
    

    客户端1

      from socket import *
    
      client = socket(AF_INET,SOCK_DGRAM)
    
      while True:
          data = input('>>>>>>>:').strip()
          client.sendto(data.encode('utf-8'),('127.0.0.1',9999))
          res,server_addr = client.recvfrom(1024)
          print(res.decode('utf-8'))
    

    客户端2

      from socket import *
    
      client = socket(AF_INET,SOCK_DGRAM)
    
      while True:
          data = input('>>>>>>>:').strip()
          client.sendto(data.encode('utf-8'),('127.0.0.1',9999))
          res,server_addr = client.recvfrom(1024)
          print(res.decode('utf-8'))
  • 相关阅读:
    [LeetCode] Best Time to Buy and Sell Stock III
    [LeetCode] Implement strStr()
    [LeetCode] Wildcard Matching
    [LeetCode] Gray Code
    [LeetCode] Divide Two Integers
    [LeetCode] Flatten Binary Tree to Linked List
    [LeetCode] Binary Tree Maximum Path Sum
    [TopCoder][SRM] SRM 562 DIV 2
    推荐博客文章
    检测两点所确定直线上的像素坐标
  • 原文地址:https://www.cnblogs.com/liuyang521/p/14294513.html
Copyright © 2011-2022 走看看