我正在尝试使用asyncio实现一个简单的echo服务器。这是我的尝试:
import asyncio
async def process(reader, writer):
while True:
data = await reader.readline()
writer.write(data)
loop = asyncio.get_event_loop()
listener = asyncio.start_server(process, host=None, port=2500)
loop.run_until_complete(listener)
loop.run_forever()
这启动了服务器,我可以从多个客户端连接,客户端也会将消息回显给它们。问题是当我关闭其中一个客户端时,回显消息也会停止出现在其他连接的客户端上。为什么会发生这种情况?如何防止这种情况发生?
答案 0 :(得分:0)
服务器挂起,因为关闭连接时不会退出循环。惯例是当网络读取函数没有返回数据时,它意味着EOF。服务器必须处理它,例如:
while True:
data = await reader.readline()
if not data:
break
writer.write(data)
没有中断,循环会一次又一次地执行,因为EOF状态不会改变。
请注意,每个连接都由其自己的process
处理,该String imagePath = downloadImageFile.getAbsolutePath();
Fragment2 obj_frament2 = new Fragment2();
Bundle bundle = new Bundle();
bundle.putString("image_path", imagePath);
obj_frament2.setArguments(bundle);
getFragmentManager().beginTransaction().add(R.id.container, obj_frament2).commit();
使用读者和属于该连接的编写器进行调用。