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

Python TCP服务器与C#客户端连接被主动拒绝问题求助

TCP连接被主动拒绝问题的解决方法

错误信息

System.Net.Internals.SocketExceptionFactory.ExtendedSocketException: 'No connection could be made because the target machine actively refused it. 127.0.0.1:1026'

问题代码

Python服务端代码

def StartServer(Host, Port, Log):
    ServerSocket = sockets.socket(sockets.AF_INET, sockets.SOCK_STREAM)
    SererSocket.bind((Host, Port))
    ServerSocket.listen(1)

    Log.log(f"Listening on {Host}:{Port}")
    
    while True:
        ClientSocket, Addr = ServerSocket.accept()
        Data = ClientSocket.recv(1024).decode("utf-8")
        response = "data recieved"
        ClientSocket.send(response.encode("utf-8"))
        ClientSocket.close()

C#客户端代码

public static void SendData(string serverAddress, int port)
{
    TcpClient client = new(serverAddress, port);

    Console.WriteLine("1");

    NetworkStream stream = client.GetStream();

    Console.WriteLine("2");

    // Send data to server
    string message = "Hello from C# client";
    byte[] data = Encoding.ASCII.GetBytes(message);
    stream.Write(data, 0, data.Length);

    Console.WriteLine("3");

    // Receive response from server
    data = new byte[256];
    int bytes = stream.Read(data, 0, data.Length);
    string responseData = Encoding.ASCII.GetString(data, 0, bytes);
    Console.WriteLine($"Received from server: {responseData}");

    Console.WriteLine("4");

    // Close the connection
    stream.Close();
    client.Close();
}

问题分析与修复

1. Python服务端的拼写错误

代码中SererSocket.bind((Host, Port))存在变量名拼写错误,正确变量名应为ServerSocket(少了字母v)。这个错误会导致服务端无法完成端口绑定,直接抛出异常,根本无法进入监听状态,这是连接被拒绝的核心原因。

2. 服务端绑定地址的限制

你将服务端绑定到127.0.0.1(本地回环地址),该地址仅允许本机程序发起连接。但客户端运行在另一台机器上,必须将服务端绑定到0.0.0.0(允许所有网卡接收外部连接),或者服务端机器的实际局域网IP(如192.168.x.x),跨机器的客户端才能正常连接。

修正后的Python服务端代码

def StartServer(Host, Port, Log):
    ServerSocket = sockets.socket(sockets.AF_INET, sockets.SOCK_STREAM)
    ServerSocket.bind((Host, Port))  # 修正拼写错误
    ServerSocket.listen(1)

    Log.log(f"Listening on {Host}:{Port}")
    
    while True:
        ClientSocket, Addr = ServerSocket.accept()
        Data = ClientSocket.recv(1024).decode("utf-8")
        response = "data received"  # 顺便修正单词拼写错误(recieved → received)
        ClientSocket.send(response.encode("utf-8"))
        ClientSocket.close()

额外注意事项

  • 启动服务端时,传入的Host参数改为0.0.0.0或服务端的局域网IP,例如StartServer("0.0.0.0", 1026, Log)
  • 客户端连接时,serverAddress参数填写服务端机器的实际IP(而非127.0.0.1),例如SendData("192.168.1.100", 1026)
  • 确保服务端机器的防火墙允许1026端口的TCP入站连接(测试阶段可临时关闭防火墙,正式环境建议配置精准的端口规则)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:56:19