首页 > 解决方案 > Python TCP套接字不会连接

问题描述

作为 uni 课程的一部分,我必须编写一个简单的 python TCP 客户端-服务器聊天,但我在获取 server.py 和 client.py 程序中的套接字以进行连接时遇到问题。

经过多次尝试,我决定真正剥离程序,只尝试连接套接字并让客户端在连接后向服务器发送一条消息。

我在同一台计算机 (macOS) 上的不同终端窗口中运行这两个程序(server.py 和 client.py)。我已经尝试关闭防火墙并运行程序,以防万一导致问题。

我的代码如下:

server.py - 这是首先运行的

from socket import *
serverPort = 11500
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))

print("The server is listening")
serverSocket.listen(1)

clientSocket, clientAddress = serverSocket.accept()

message, clientAddress = serverSocket.recvfrom(2048)

client.py - 一旦 server.py 运行,它就会启动

from socket import *

serverName = "127.0.0.1"
serverPort = 11500

clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))

message = "Hello"
clientSocket.send(message.encode())

这是我收到的错误:

(base) me@ME python_socket % python3 tcp_server.py
The server is listening
Traceback (most recent call last):
  File "tcp_server.py", line 11, in <module>
    message, clientAddress = serverSocket.recvfrom(2048)
OSError: [Errno 57] Socket is not connected

提前感谢您的帮助。看起来应该很简单,但即使在线观看教程后,我似乎仍然遇到套接字无法连接的问题。

标签: pythonsockets

解决方案


问题是,在server.py代码中,您应该serverSocket在该recvfrom行中替换为clientSocket,因为当您accept在该行之前调用时,clientSocket(由 返回accept)是特定于该连接的新套接字。

clientSocket, clientAddress = serverSocket.accept()

message, clientAddress = clientSocket.recvfrom(2048)

更改后,它将正常工作。


推荐阅读