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

Python客户端与JavaScript服务器本地Socket连接被拒绝问题求助

解决Python客户端无法连接JS TCP服务器的问题

别担心,连接被拒绝(Connection refused)是Socket开发中很常见的问题,咱们一步步排查和解决:

首先排查最核心的原因:服务器是否正常运行并监听端口

这是最容易忽略的点——你必须先启动JS服务器,再运行Python客户端。

验证服务器状态的方法:

  1. 把你的JS代码保存为server.js,在终端执行:
    node server.js
    
    运行后如果没有报错,说明服务器已经启动,开始监听127.0.0.1:1337。
  2. 用命令行工具确认端口1337是否被监听:
    • Linux/macOS:
      lsof -i :1337
      # 或者
      netstat -an | grep 1337
      
    • Windows:
      netstat -ano | findstr :1337
      
    如果能看到处于LISTEN状态的记录,说明服务器监听正常;如果看不到,检查JS代码是否有语法错误,或者端口是否被其他程序占用。

检查JS服务器代码的正确性

你的JS服务器代码本身是没问题的:

var net = require('net'); 
var server = net.createServer(function(socket){ 
  socket.write('Echo server\r\n'); 
  socket.pipe(socket); // 回显收到的所有数据
}); 
server.listen(1337, '127.0.0.1');

它创建了一个TCP回显服务器,收到数据后会原样返回给客户端。唯一需要注意的是:listen方法的第二个参数是127.0.0.1,意味着服务器只接受来自本地的连接,如果你想让其他机器也能连接,可以改成0.0.0.0(但本地测试用127.0.0.1完全没问题)。

优化Python客户端代码(增加错误提示和健壮性)

你的Python代码逻辑没问题,但可以增加一些错误提示,方便排查问题,同时修正命名的误导性:

import socket

class JsSocketClient:  # 更准确的类名
    def __init__(self):
        self.client_socket = None
        self.portNumber = 1337
        self.host = "localhost"

    def socketMethod(self):
        """建立Python与JS的Socket连接"""
        try:
            self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.client_socket.connect((self.host, self.portNumber))
            print(f"✅ 成功连接到服务器 {self.host}:{self.portNumber}")
        except Exception as e:
            print(f"❌ 连接失败: {str(e)}")
            raise  # 抛出异常让上层处理

    def socketConnection(self):
        if not self.client_socket:
            print("⚠️ 请先调用socketMethod建立连接")
            return
        try:
            sentence = "Test"
            self.client_socket.send(sentence.encode())
            print(f"📤 已发送数据: {sentence}")
            
            data = self.client_socket.recv(1024)
            print(f"📥 收到服务器响应: {data.decode().strip()}")  # 解码并去除多余换行
            
        except Exception as e:
            print(f"❌ 通信出错: {str(e)}")
        finally:
            if self.client_socket:
                print("🔌 关闭Socket连接")
                self.client_socket.close()

if __name__ == "__main__":
    js_client = JsSocketClient()
    try:
        js_client.socketMethod()
        js_client.socketConnection()
    except Exception as e:
        print(f"💥 程序出错: {str(e)}")

正确的运行步骤

  1. 打开第一个终端,启动JS服务器:node server.js(保持这个终端窗口打开,不要关闭)
  2. 打开第二个终端,运行Python客户端:python client.py

正常情况下,你会看到类似这样的输出:

✅ 成功连接到服务器 localhost:1337
📤 已发送数据: Test
📥 收到服务器响应: Echo server
Test
🔌 关闭Socket连接

其他可能的排查点

如果还是连接失败,试试这些:

  • 端口被占用:换一个端口,比如把JS和Python代码里的1337改成1338,再重新运行
  • 防火墙拦截:本地测试一般不会,但如果有第三方防火墙,可以临时关闭试试
  • 地址不匹配:如果JS服务器监听的是0.0.0.0,Python客户端连接localhost或127.0.0.1都没问题;如果服务器监听的是其他IP,客户端要对应连接那个IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:21