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
相关产品推荐
相关产品推荐

