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

Python远程Socket连接超时求助:Replit客户端连本地服务器失败

远程Shell连接超时问题排查

问题现象

运行在Replit的客户端尝试连接本地服务器时出现超时错误,错误信息如下:

~/SEAshell$ python3 client.py
Enter hostname: 192.168.10.16
[*] Set target to 192.168.10.16 ...
[*] Connecting to server...
Traceback (most recent call last):
  File "client.py", line 14, in <module>
    server.connect(ADDR)
TimeoutError: [Errno 110] Connection timed out 

客户端显示[*] Connecting to server...后等待许久才抛出超时异常,导致命令无法发送,代码未完成。

客户端代码

from socket import *
from threading import Thread
from os import system

HOST = input('Enter hostname: ')
print('[*] Set target to ' + HOST + " ...")
PORT = 623
ADDR = (HOST, PORT)
BUFF = 1024 * 128
SEP = "<sep>"

server = socket(AF_INET, SOCK_STREAM)
print('[*] Connecting to server...')
server.connect(ADDR)

print('[*] Server connected successfully!')


def remote():
    print('[>] Activation shell for ' + str(addr))
    print('[>] Receiving path information...')
    info = server.recv(BUFF).decode()
    info = info.split(SEP)
    while True:
                    command = input(info[2] + "@" + info[1] + ":" + info[0] + "$ ")
                    print('Test: ' + command)


remote()

服务端代码

from socket import *
from threading import Thread
import os

HOST = gethostbyname(gethostname())
PORT = 623
ADDR = (HOST, PORT)
BUFF = 1024 * 128
SEP = "<sep>"

print('[*] Starting server at ' + str(ADDR))
server = socket(AF_INET, SOCK_STREAM)
print('[*] Binding server...')
try:
    server.bind(ADDR)
except:
    ADDR = (HOST, 624)
    server.bind(ADDR)
    print('[*] Binded server at ' + str(ADDR))
print('[*] Server binded successfully!')
print('[*] Listening for incoming connections')
server.listen(5)

def remote(conn, addr):
    cdir = os.getcwd()
    login = os.getlogin()
    hostname = gethostname()
    firstsend = send()


while True:
    print('[*] Queued...')
    conn, addr = server.accept()
    print('[*] Connection received from ' + str(addr))
    t = Thread(target=remote, args=(conn, addr))
    t.start()
    print('[*] Listening for new connections...')

排查与解决要点

  • 网络穿透问题:Replit客户端处于公网环境,直接使用局域网IP(如192.168.10.16)无法访问本地服务器。需要在路由器上配置端口转发,将公网IP的指定端口映射到本地服务器的IP和监听端口,客户端连接公网IP+转发端口。
  • 服务端监听地址修正:服务端当前用gethostbyname(gethostname())绑定局域网IP,仅能接收局域网内请求。应将HOST设为0.0.0.0,让服务端监听所有网卡的连接请求,确保端口转发过来的公网请求能被接收。
  • 端口一致性检查:服务端代码中若623端口绑定失败会自动切换到624,但客户端固定使用623端口。需确保客户端使用的端口与服务端实际绑定的端口一致,可在服务端启动后确认监听端口,再修改客户端的PORT值。
  • 防火墙与安全组配置:本地服务器的防火墙需开放服务端监听的端口(623或624),允许外部入站连接;路由器的防火墙也需放行端口转发的规则。
  • 服务端代码逻辑修复:服务端remote函数中调用了未定义的send()函数,连接成功后会导致线程报错退出,后续需补充该函数实现(如通过conn.send()发送初始化信息)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:27:18