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

Python多服务器TCP Socket连接出现Connection Refused问题求助

多服务器TCP Socket连接拒绝问题

我有3台服务器需要互联通信,目标是运行分布式MapReduce。用Python的TCP Socket实现多服务器连接时遇到问题,我简化了代码来定位这个特定问题。重要信息:这段代码通过文末的bash脚本分发并在computers列表中的每台服务器上运行。

简化后的Python代码

from _thread import *
import socket
from time import sleep

computers = ["137.194.142.130", "137.194.142.131", "137.194.142.133"]
list_PORT = [3652,4457, 6735, 9725]
idt = socket.gethostbyname(socket.gethostname())
SIZE = 1024
FORMAT = "utf-8"

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((idt, list_PORT[computers.index(idt)+1]))
server.listen() 

sleep(4)        # 让所有服务器有时间启动监听,再执行后续连接逻辑

list_socket_rec = []
if computers.index(idt) != 0:
    for server in computers[:computers.index(idt)]:
        socket_nb = 0
        skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        list_socket_rec.append(skt)
        list_socket_rec[socket_nb].connect((server, list_PORT[computers.index(idt)]))  # 报错:连接被拒绝
        socket_nb += 1

        # 这个循环尝试连接列表中索引比当前服务器小的所有节点,避免重复连接

报错信息

代码末尾的connect()函数触发如下错误:

Traceback (most recent call last):
  File "file", line 24, in <module>
    list_socket_rec[socket_nb].connect((server, list_PORT[computers.index(idt)]))  # fonctionne pas ==> connection refused
ConnectionRefusedError: [Errno 111] Connection refused

启动服务器的Shell脚本

#!/bin/bash
# A simple variable example
login="login"
remoteFolder="/tmp/$login/"
fileName="server"
fileExtension=".py"
computers=("137.194.142.130", "137.194.142.131", "137.194.142.133")

for c in ${computers[@]}; do
  command0=("ssh" "$login@$c" "lsof -ti | xargs kill -9")
  command1=("ssh" "$login@$c" "rm -rf $remoteFolder;mkdir $remoteFolder")
  command2=("scp" "$fileName$fileExtension" "$login@$c:$remoteFolder$fileName$fileExtension")
  command3=("ssh" "$login@$c" "cd $remoteFolder; python3 $fileName$fileExtension")
  echo ${command0[*]}
  "${command0[@]}"
  echo ${command1[*]}
  "${command1[@]}"
  echo ${command2[*]}
  "${command2[@]}"
  echo ${command3[*]}
  "${command3[@]}" &
done

补充尝试

我曾以为问题是同一端口多连接导致的,尝试为每个连接绑定/使用不同端口,但错误依然存在。手动测试两台服务器:先运行列表第一台的代码,再运行第二台,连接成功。

内容的提问来源于stack exchange,提问作者Dorian Fitton-Keller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:25:13