zoukankan      html  css  js  c++  java
  • tcp粘包解决

    import socket
    import hashlib
    import subprocess
    import struct
    
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)   #重用地址
    phone.bind(('192.168.20.105',8081))
    phone.listen(5)
    while 1:
        conn,addr=phone.accept()
        print('线路是%s' % conn)
        print('地址是',addr)
        tag = True
        while 1:
            while tag:
                user = conn.recv(1024).decode('utf-8')
                pwd = conn.recv(1024).decode('utf-8')
                md5_obj = hashlib.md5(user.encode('utf-8'))
                s = pwd+user
                print(s)
                md5_obj.update(s.encode('utf-8'))
                pwd = md5_obj.hexdigest()
                print(pwd)
                if user == 'egon'and pwd=='82bdb4164c14585f32e70ec0a37b3569':
                    conn.send('right'.encode('utf-8'))
                    tag = False
                    break
                else:
                    conn.send('用户名或密码错误,请重新输入!'.encode('utf-8'))
            try:
                cmd = conn.recv(1024)
                res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                mes = res.stdout.read()
                mesr = res.stderr.read()
                ret = struct.pack('i',(len(mes)+len(mesr)))
                conn.send(ret)
                conn.send(mes)
                conn.send(mesr)
            except Exception:
                break
        conn.close()
    phone.close()
    服务端
    import socket
    import time
    import struct
    
    phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.connect(('192.168.20.105',8081))
    tag = True
    while 1:
        while tag:
            user = input('username:')
            phone.send(user.encode('utf-8'))
            pwd = input('password:')
            phone.send(pwd.encode('utf-8'))
            time.sleep(1)
            mes = phone.recv(1024).decode('utf-8')
            print(mes)
            if mes =='right':
                tag = False
                break
        cmd = input('>>:')
        if not cmd:continue
        phone.send(cmd.encode('utf-8'))
        lens = phone.recv(4)
        lens = struct.unpack('i',lens)
        lens = lens[0]
        mes = phone.recv(1024)
        mes_size = 1024
        while mes_size<lens:
            if lens-mes_size>1024:
                mes+=phone.recv(1024)
            else:
                mes+=phone.recv(lens-mes_size)
            mes_size += 1024
        print(mes.decode('gbk'))
    
    phone.close()
    客户端
  • 相关阅读:
    c#大文件上传解决方案支持分片断点上传
    css精灵动画
    文字游戏
    利用myeclipse配置数据库连接池
    python 简单的txt文件读写
    数据库连接池配置
    hdu 1030 Delta-wave
    java jdbc sqlhelper
    js实现页面的自动读秒跳转
    购物车模块
  • 原文地址:https://www.cnblogs.com/pythonclass/p/7411780.html
Copyright © 2011-2022 走看看