zoukankan      html  css  js  c++  java
  • Socket_SSH-3(粘包)

    粘包:两次数据粘到一起了。在Windows中基本看不出来效果。

    服务器端的配置:

    import socket,os,time
    
    server=socket.socket()
    server.bind(('localhost',9999))
    server.listen()
    while True:
        conn,addr=server.accept()
        print("new connection is :",addr)
        while True:
            data=conn.recv(1024)
            if not data:
                print("客户端已经断开")
                break
            cmd_res=os.popen(data.decode('utf-8')).read()
            if len(cmd_res)==0:
                cmd_res="命令无效,没有返回值"
            conn.send(str(len(cmd_res.encode())).encode('utf-8'))
            #整数不能直接encode,需要先转成字符串,再encode.发大小给客户端
            #time.sleep(0.5) #防止粘包
            client_ack=conn.recv(1024) #wait client to confirm
            print("ack from client:",client_ack)
            conn.send(cmd_res.encode('utf-8'))
    server.close()
    

     客户端的配置:

    import socket
    
    client=socket.socket()
    client.connect(('localhost',9999))
    while True:
        cmd=input(">>:").strip()
        if len(cmd)==0:
            break
        client.send(cmd.encode('utf-8'))
        cmd_res_size=client.recv(1024) #接收命令结果的长度。
        print("命令结果大小:",cmd_res_size)
        client.send('准备好接收了,你可以发了'.encode("utf-8"))
        received_size=0
        received_data=b""
        while received_size<int(cmd_res_size.decode("utf-8")):
            data=client.recv(1024)
            received_size=received_size+len(data) #每次收到的有效数字,有可能小于1024
            received_data=received_data+data
        else:
            print("cmd res received done...",received_size)
            print(received_data.decode('utf-8'))
    client.close()
    
  • 相关阅读:
    SVGEditor
    SVG六基本元素
    SVG在网页中的四种使用方式
    Chrome中java因过期而遭到阻止
    Weblogic常见故障常:JDBC Connection Pools
    MyBatis java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
    MYBATIS 无效的列类型: 1111
    [MyBatis]mapperLocations属性通配符的使用
    secureCRT自动化脚本
    google protocol buffer的原理和使用(四)
  • 原文地址:https://www.cnblogs.com/momo8238/p/7301544.html
Copyright © 2011-2022 走看看