首页 > 解决方案 > 如何使用 python 套接字通过连接发送 api 响应?

问题描述

我试图让服务器等待客户端建立连接,从客户端获取数据,使用该数据发出 api 请求,并将响应发送给客户端。一切正常,除了将响应发送回客户端(客户端功能只是超时)。如果将 conn.sendall("anythinghere") 放在 while True 循环内,这可行,但显然不会返回我需要它返回的内容。将 conn.sendall 放在循环之外会导致客户端超时。

服务器代码

conn, addr = s.accept()

print('Connected by', addr)
fragments = []
while True:
    chunk = conn.recv(4096)
    if not chunk:
        break
    fragments.append(chunk)

action = "".join(fragments)

URL = "http://172.31.55.211/" + action

print("making request")
r = requests.get(url = URL)
data = r.json()

conn.sendall(data['message'])

客户代码

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print(s)
    s.connect((HOST, PORT))
    s.sendall(b'hellocvs')
    data = s.recv(1024)

    print('Received', repr(data))

    return {
        'statusCode': 200,
        'body': json.dumps(str(data))
    }

标签: pythonsocketsserver

解决方案


在线action = "".join(fragments)服务器代码将不会运行,因为fragmentsbytes not string需要b''.join(fragments)加入字节


推荐阅读