【发布时间】:2021-11-08 17:16:31
【问题描述】:
我想使用套接字在服务器和客户端之间实现简单的双向通信。客户端发送消息并等待回复。服务器读取消息并以适当的结果回复。我有以下代码,但它们都挂起。你能解释一下这里出了什么问题吗?
服务器:
import socket
import time
HOST = "127.0.0.1"
PORT = 18735
# create socket and listen
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen()
print(f"Listening on {HOST}:{PORT}")
# accept connection
conn, addr = s.accept()
print(f"Accepted connection from {HOST}:{PORT}")
cmd = ""
while True:
data = conn.recv(2)
time.sleep(1)
if not data:
break
print(data.decode())
# conn.sendall(b"OK") This line fixes the problem!
conn.sendall(b"Finished")
s.close()
客户:
import socket
HOST = "127.0.0.1"
PORT = 18735
# create socket and connect
cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cs.connect((HOST, PORT))
# send data
cs.sendall(b"123456")
# wait for a result
data = cs.recv(1024)
print("result: ", data)
cs.close()
编辑: 现在,我可以通过从服务器发送短消息来解决问题。但是,我想知道这是否有必要?
【问题讨论】:
-
data = conn.recv(2)将阻塞,直到从客户端接收到数据或客户端关闭连接(或其他一些网络错误)。服务器正在等待这种情况发生,但与此同时,客户端正在等待服务器发送一些东西。
标签: python sockets python-sockets