python - 如何使用 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))
}
解决方案
在线action = "".join(fragments)
服务器代码将不会运行,因为fragments
您bytes not string
需要b''.join(fragments)
加入字节
推荐阅读
- entity-framework - 在 .net 核心实体框架中加入 3 个表
- python-3.x - 如何在 AppleScript 中验证用户输入
- r - 在 R 中创建一个带有两个 y 轴的图表
- asp.net-mvc - 在浏览器 URL 中输入路由值和使用 RedirectToAction 时控制器操作方法未命中?
- ruby - Is there an obvious way to reduce rows when using Kiba?
- mongodb - 如何在 Object 类型的字段中查询(查找)?
- google-cloud-bigtable - 谷歌 bigtable 或任何谷歌产品的时间序列数据模式设计
- deep-learning - Jetson nano 上 TensorRt 模型(pytorch->onnx->TensorRT)的准确性降低
- excel - 当前用户 Active Directory 组列表
- asp.net - 使用 Visual Studio 和 Asp.Net Core 的 Dockerfile 错误