我正在尝试建立一个简单的聊天室,但从基础开始.我有一个服务器向客户端发送字符串,但是,我的while循环不会中断.
服务器
import socket
HOST = '' # Symbolic name meaning the local host
PORT = 50023 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print ('Connected by', addr)
conn.send("hello client")
conn.send("\nhow are you")
conn.send("stop")
Run Code Online (Sandbox Code Playgroud)
客户
import socket
HOST = 'localhost' # The remote host
PORT = 50023 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while True:
data = s.recv(1024)
if data == "stop":
break
print(data)
print("we got here")
Run Code Online (Sandbox Code Playgroud)
我想指出我也试过了
if not data:
break
Run Code Online (Sandbox Code Playgroud)
那没用
您的服务器正在发送:
hello client\nhow are youstop
Run Code Online (Sandbox Code Playgroud)
但是你的客户正在测试
stop
Run Code Online (Sandbox Code Playgroud)
既然如此"hello client\nhow are youstop" != "stop",你不太可能break发表你的陈述.
意识到TCP提供了可靠的字节流; 只要每个字节按正确的顺序到达目的地,就完成了TCP的工作.没有消息边界,只有字节边界.一方.recv()不需要以任何方式与其他方面对齐.send().
如果您需要保留邮件边界的服务,可以尝试UDP.或者,您可以在TCP(例如换行符或类型长度值元组)之上实现自己的消息框架.