nb1232 2022-04-17 22:52 采纳率: 100%
浏览 24
已结题

【help】python socket编程在学习解决沾包问题时,客户端无法收到结果

相应代码如下
服务器:

import socket
import subprocess
import struct
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8081))
phone.listen(5)
while True:
    conn,claddr=phone.accept()
    while True:
        try:
            data = conn.recv(1024)
            print('clientdata', data)
            obj = subprocess.Popen(data.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            total_size = len(obj.stdout.read()) + len(obj.stderr.read())
            head = struct.pack('i', total_size)
            conn.send(head)
            print('1')
            conn.send(obj.stdout.read() + obj.stderr.read())
            print('2')
        except ConnectionError:
            break
    conn.close()
phone.close()


客户端:

import socket
import struct
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.connect(('127.0.0.1',8081))
while True:
    msg=input('show:')
    if not msg:continue
    phone.send(msg.encode('utf-8'))
    head=phone.recv(4)
    real_head=struct.unpack('i',head)
    total_size=real_head[0]
    print(total_size)
    recv_size=0
    recv_data=b''
    while recv_size<total_size:
        rec=phone.recv(1024)
        recv_data+=rec
        recv_size+=len(rec)
    print(recv_data.decode('gbk'))
phone.close()

此时发送命令,如ipconfig应在客户端收到相应结果,但此时发送命令后无回应,程序一直等待。
求解

  • 写回答

2条回答 默认 最新

  • 溪风沐雪 2022-04-17 23:29
    关注

    我测试有响应啊,输入ifconfig,返回数据

    img


    但是你现在的逻辑会导致后续无限循环卡死

    img


    这两行会导致一个死循环,为什么要做这个循环你自己琢磨一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿