python - 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
提前感谢您的帮助。看起来应该很简单,但即使在线观看教程后,我似乎仍然遇到套接字无法连接的问题。
解决方案
问题是,在server.py
代码中,您应该serverSocket
在该recvfrom
行中替换为clientSocket
,因为当您accept
在该行之前调用时,clientSocket
(由 返回accept
)是特定于该连接的新套接字。
clientSocket, clientAddress = serverSocket.accept()
message, clientAddress = clientSocket.recvfrom(2048)
更改后,它将正常工作。
推荐阅读
- r - 在折线图中显示三个因素
- python - Python Flask Oidc + Keycloak 获取组、属性
- javascript - 无法从使用状态的本机反应的 Firebase Firestore 数据库中获取数据
- reactjs - Material UI React paper 组件在嵌套网格显示问题
- javascript - ThreeJS WebGLRenderTarget 有空白纹理
- r - 在 R 中处理时间变量以进行 ANOVA
- python - 如何将布尔值分配给变量并将分配的变量传递给Python中的if语句
- mongodb - 为什么 $dateToString (aggregation) 将日期转换为少 1 天?
- python - 关于变量范围的棘手 Python 问题
- python - 即时重新加载 Cython 模块