老师,请问open_connection是否可用于自定义socket协议的编程?
来源:13-6 asyncio 模拟 http 请求

宝慕林840146
2022-06-27
是这样的,我把本章节的代码在自己的环境中改了一下,但是实际运行的过程中,程序执行到async for那行就不再继续执行了,一直处于挂起状态。
import asyncio
import socket
async def login(info):
#建立socket连接
reader, writer = await asyncio.open_connection('10.20.xx.xx',11111)
writer.write(bytes.fromhex(info))
all_lines = []
async for raw_line in reader:
data = raw_line.decode("utf8")
all_lines.append(data)
recv_info = "".join(all_lines)
return recv_info
if __name__ == "__main__":
import time
start_time = time.time()
loop = asyncio.get_event_loop()
tasks = []
# 取10条做测试
for i in range(10):
login_info = info[i]
tasks.append(login(login_info))
loop.run_until_complete(asyncio.wait(tasks))
print('last time:{}'.format(time.time()-start_time))
这个里面,main中的info是我自己获取的登录信息,为一个列表。发送的内容是自定义登录协议数据,我推断是reader没有从io流中读到数据,但是通过wireshark抓包能看到服务端是返回了数据的,请问这个您直到是怎么回事么?
写回答
1回答
-
bobby
2022-06-28
服务本身返回的数据要看是http数据还是tcp数据,如果是http数据的话,那么在客户端你就需要自己知道数据是否传输完成 你可以在async for里面每次获取到数据以后打印看看
042022-10-08
相似问题