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

Python Socket跨网连接问题:服务器正常,客户端启动即关闭

Python Socket跨网络连接故障排查

服务器端运行无异常,但外部客户端启动后直接关闭。

客户端代码

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((MY PUBLIC IP, 1234))

while True:
    full_msg = ''
    while True:
        msg = s.recv(8)
        if len(msg) <= 0:
            break
        full_msg += msg.decode("utf-8")

    if len(full_msg) > 0:
        print(full_msg)

服务器端代码

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 1234))
s.listen(5)

while True:
    clientsocket, address = s.accept()
    print(f"Connection from {address} has been established.")
    clientsocket.send(bytes("OI PEDRONE","utf-8"))
    clientsocket.close()

已尝试的操作

  • 将服务器绑定IP修改为0.0.0.0或socket.gethostname(),问题仍未解决。

解决办法

1. 配置路由器端口映射

服务器处于局域网内,外部客户端通过公网IP无法直接访问,必须在路由器上设置端口转发:

  • 登录路由器管理后台(通常地址为192.168.1.1或192.168.0.1)
  • 找到「端口转发」/「虚拟服务器」选项
  • 添加规则:外部端口1234,内部端口1234,内部IP填服务器在局域网内的真实IP(如192.168.3.10),协议选择TCP

2. 给客户端添加异常捕获

客户端直接关闭是因为连接失败或后续操作抛出异常但无处理逻辑,修改代码捕获异常并保留窗口:

import socket

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("你的公网IP", 1234))
    
    full_msg = ''
    while True:
        msg = s.recv(8)
        if len(msg) <= 0:
            break
        full_msg += msg.decode("utf-8")

    if full_msg:
        print(full_msg)
except Exception as e:
    print(f"错误信息: {e}")
input("按回车退出...")

3. 调整服务器连接逻辑

服务器发送消息后立刻关闭连接,客户端接收完数据后会再次尝试recv,此时连接已断开会触发异常。可以让服务器延迟关闭,或客户端接收完主动退出:

  • 服务器端修改(添加延迟):
import socket
import time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 1234))
s.listen(5)

while True:
    clientsocket, address = s.accept()
    print(f"Connection from {address} has been established.")
    clientsocket.send(bytes("OI PEDRONE","utf-8"))
    time.sleep(1)  # 延迟1秒再关闭,确保客户端接收完成
    clientsocket.close()

4. 检查防火墙设置

  • 服务器本地防火墙:允许1234端口的TCP入站连接
  • 客户端网络防火墙:允许访问目标公网IP的1234端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:11:13