为什么我的While True循环没有破坏?

aaa*_*aav -2 python sockets

我正在尝试建立一个简单的聊天室,但从基础开始.我有一个服务器向客户端发送字符串,但是,我的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)

那没用

Rob*_*obᵩ 5

您的服务器正在发送:

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(例如换行符或类型长度值元组)之上实现自己的消息框架.