zoukankan      html  css  js  c++  java
  • python3 tcp黏包情况一

    客户端没有及时接收缓冲区的包,造成多个包接收(服务端发送了一段数据,客户端只收了一小部分,客户端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)
    -------------------------------------------tcp_stickybag_server.py-------------------------------------------
    # coding:utf-8
    import socket
    import subprocess
    
    tcp_server = socket.socket()
    ip_port = ("127.0.0.1", 8001)
    tcp_server.bind(ip_port)
    tcp_server.listen(5)
    
    while 1:
        conn, addr = tcp_server.accept()
        from_client_msg = conn.recv(1024)
        print("来自客户端的消息:", from_client_msg.decode("utf-8"))
        res = subprocess.Popen(
            from_client_msg.decode("utf-8"),
            shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        conn.send(res.stdout.read())
    
    conn.close()
    tcp_server.close()


    -------------------------------------------tcp_stickybag_client.py-------------------------------------------
    
    # coding:utf-8
    import socket
    
    tcp_client = socket.socket()
    ip_port = ("127.0.0.1", 8001)
    tcp_client.connect(ip_port)
    
    while 1:
        client_input = input("cmd指令1>>>:").strip()  # 可以输入dir 或 ipconfig等等
        tcp_client.send(client_input.encode("utf-8"))
        from_server_msg = tcp_client.recv(1024)
        print("来自服务端的消息:", from_server_msg.decode("gbk"))
    
    tcp_client.close()

    这种情况,可以尝试调大一次接收数据的最大大小,获取缓存区的大小,方法如下:

    # coding:utf-8
    import socket
    
    tcp_client = socket.socket()
    ip_port = ("127.0.0.1", 8001)
    tcp_client.connect(ip_port)
    bufsize = tcp_client.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
    
    while 1:
        client_input = input("cmd指令1>>>:").strip()
        tcp_client.send(client_input.encode("utf-8"))
        from_server_msg = tcp_client.recv(bufsize)
        print("来自服务端的消息:", from_server_msg.decode("gbk"))
    
    tcp_client.close() 
    
    
    
     
  • 相关阅读:
    《信息安全系统设计基础》实验一 开发环境的熟悉
    20145208 《信息安全系统设计基础》第七周学习总结
    20145208 《信息安全系统设计基础》第六周学习总结
    TCP基本概念
    UNP学习笔记1——基本TCP套接字编程
    C++内存分配方式——小结
    APUE学习笔记7——进程间通信
    哈希表的概念和简单的实现算法
    APUE学习笔记6——线程和线程同步
    C++面向对象的设计思想——小结
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/10928247.html
Copyright © 2011-2022 走看看