zoukankan      html  css  js  c++  java
  • python socket粘包

    server:

    import socket,os


    server = socket.socket()
    server.bind(("localhost",9999))
    server.listen()


    while True:
    conn, addr = server.accept()
    while True:
    data= conn.recv(1024)
    print("接受成功",data)
    if not data:
    print("客户端已经断开")
    break
    print("执行指令",data)

    cmd_res =os.popen(data.decode()).read()
    print("before send ",len(cmd_res))
    if len(cmd_res)==0:
    cmd_res = "cmd has no putput"
    conn.send(str(len(cmd_res.encode())).encode("utf-8"))
    client_rec = conn.recv(1024)#去掉粘包
    conn.send(cmd_res.encode("utf-8"))
    print("send done ...")
    server.close()


    client:

    import socket

    client = socket.socket()
    client.connect(("localhost",9999))

    while True:
    cmd = input(">>:").strip()
    if len(cmd)==0:continue
    client.send(cmd.encode("utf-8"))
    print("发送成功")
    cmd_res_size = client.recv(1024) #接收这条命令执行结果的大小
    print("命令结果的大小",cmd_res_size)
    client.send("准备好接收了,发吧loser".encode("utf-8"))
    received_size = 0#已接收到的数据
    received_data =b''

    while received_size < int(cmd_res_size.decode()):
    data = client.recv(1024)
    received_size +=len(data)
    received_data +=data

    else:
    print("cmd res receive done...",received_size)
    print(received_data.decode())
    client.close()
     
  • 相关阅读:
    sun.misc.Unsafe的理解
    线程同步工具类
    HashMap源码分析
    【设计模式】GoF设计模式学习总结
    基于ARM处理器的反汇编器软件简单设计及实现
    HashMap内存泄露
    基于Spring cloud Ribbon和Eureka实现客户端负载均衡
    ReentrantLock
    数据库自增主键
    排序
  • 原文地址:https://www.cnblogs.com/anhao-world/p/13444425.html
Copyright © 2011-2022 走看看