You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Python官方TCP客户端代码遇多类网络及事件循环错误求助

Asyncio TCP Echo客户端常见问题解决

1. ConnectionRefusedError: 远程计算机拒绝连接

问题原因:你连接的127.0.0.1:80没有运行对应的TCP echo服务,80端口默认是HTTP服务端口,不会处理echo请求。
解决方法:

  • 启动本地TCP echo服务器,示例代码如下:
import asyncio

async def handle_echo(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')
    print(f"Received {message!r} from {addr!r}")

    print(f"Send: {message!r}")
    writer.write(data)
    await writer.drain()

    print("Close the connection")
    writer.close()
    await writer.wait_closed()

async def main():
    server = await asyncio.start_server(
        handle_echo, '127.0.0.1', 8888)

    addrs = ', '.join(str(sock.getsockname()) for sock in server.sockets)
    print(f'Serving on {addrs}')

    async with server:
        await server.serve_forever()

asyncio.run(main())
  • 修改客户端的连接地址为'127.0.0.1', 8888,确保服务器先启动,再运行客户端。
  • 也可以连接公共TCP echo服务,比如'echo.telnet.org', 7(部分公共服务可能存在不稳定情况)。

2. Spyder中RuntimeError: asyncio.run()不能从运行中的事件循环调用

问题原因:Spyder的IPython环境已启动asyncio事件循环,asyncio.run()会创建新事件循环,两者冲突导致报错。
解决方法:

  • 替换asyncio.run()为现有事件循环运行任务,修改客户端最后一行代码:
# 替换原有的asyncio.run()
import asyncio
loop = asyncio.get_event_loop()
loop.run_until_complete(tcp_echo_client('Hello World!'))
  • 或者进入Spyder设置:IPython console > Advanced settings,关闭Support asyncio event loop integration选项,之后可正常使用asyncio.run()。

3. 连接8.8.8.8时OSError: 信号量超时

问题原因:8.8.8.8是谷歌DNS服务器,仅处理DNS查询(UDP/TCP 53端口),不会响应TCP echo请求,因此连接后无数据返回,最终超时。
解决方法:选择专门的echo服务地址和端口,比如本地服务器或公共echo服务的7端口(echo服务默认端口为7)。

内容的提问来源于stack exchange,提问作者Hex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:37:43