python - Python socket accept() 不接受连接
问题描述
一个非常基本的问题,但我找不到我的错误。我基本上使用这个教程代码来实现我自己的客户端-服务器程序:客户端发送一些数据,服务器显示它(而不是像教程中那样回显数据)
回显教程代码有效,但我在服务器上打印数据的调整代码无效。我添加了一些分隔符机制来检测整个消息。我的代码:
服务器.py:
class ThreadedServer:
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))
print("Server bound on Port "+str(port))
def listen(self):
self.sock.listen(5)
while True:
print("Waiting for incoming connections...")
client, address = self.sock.accept()
client.settimeout(60)
print("Starting Working thread.")
threading.Thread(target=self.listenToClientDelimiter, args=(client, address)).start()
def listenToClientDelimiter(self, client, address):
print("Connect to client "+address)
length = None
buffer = ""
while True:
data = client.recv(1024)
print("Received raw data: "+str(data))
if not data:
break # connection closed
buffer += data
while True:
if length is None:
if LENGTH_DELIMITER not in buffer:
break # delimiter not found, wait for next data package
length_str, _, buffer = buffer.partition(LENGTH_DELIMITER)
length = int(length_str)
if len(buffer) < length:
break # wait until full length got received before we proceed
message = buffer[:length]
buffer = buffer[length:]
length = None
# PROCESS MESSAGE HERE
print(message)
client.close()
if __name__ == "__main__":
ThreadedServer('', 65432).listen()
客户端.py:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect(("127.0.0.1", 65432))
connect_user_cmd = "18:CONNECT_USER;Peter"
print("Trying to send data: "+connect_user_cmd.decode())
print(s.send(connect_user_cmd))
我运行服务器,然后是客户端。服务器的输出:
Server bound on Port 65432
Waiting for incoming connections...
如您所见,我期待一些日志消息,当然还有我发送的消息。客户端输出:
Trying to send data: 18:CONNECT_USER;Peter
21
Process finished with exit code 0
即使我没有启动服务器,这也会从客户端输出。奇怪的是,回声部分确实有效。有人可以提示我正确的方向吗?谢谢!
解决方案
推荐阅读
- php - Laravel 8 和 Livewire 事件运行不佳
- matlab - 将矩阵的列组合成向量
- batch-file - 有没有可能批量获得多种颜色?
- r - 如何使用 sf 包计算到 R 中最近多边形的距离
- html - Angular/Bootstrap - 切换/折叠具有特定 ID 的表行?
- r - 在 R 中展平布尔向量
- docker - 将 Docker 容器部署到 Heroku - 究竟在部署什么?
- tkinter - 如果我单击覆盖重定向的窗口并移动它(窗口),如何获得更好的窗口位置?
- ajax - 如何在动态创建的模型窗口中获取输入文本框的更新值
- wordpress - WP循环,按自定义分类法分组,也仅使用帖子的主要分类法