Python 2.7 : While loop, 无法突破

标签 python sockets python-2.7 while-loop

我是编程和这个网站的新手,所以我希望我能澄清我正在尝试做什么。如果我发送字符串退出,我会尝试打破一个循环。似乎就这样继续下去。请帮忙!

import socket
Home = '10.0.0.5' #ipaddr
Port = 10000 #port 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((Home, Port)) 
s.send('Hey it works!') 
while True:
    data = s.recv(1024) 
    print data
    if data == 'quit': 
        break 

我能够很好地发送和接收消息,但是当我发送退出或“退出”时,它会继续运行。我究竟做错了什么?

谢谢!

最佳答案

while-break- 逻辑很好。问题的第一部分是在 s.recv(1024) 调用中,该调用(取决于套接字设置)可能会阻塞,直到到达那么多字节为止,请参阅 http://linux.die.net/man/2/recv :

If no messages are available at the socket, the receive calls wait for a message to arrive, unless the socket is nonblocking

此外,这是问题的第二部分,如果您尝试通过连接发送消息,则需要发明一种分隔消息的通信协议(protocol)。否则data将永远不会只是'quit'

因此,要么处理字节流的所有含义并了解像 recv 这样的系统调用的行为方式,要么使用向您隐藏所有这些详细信息的更高级别消息传递库。

关于Python 2.7 : While loop, 无法突破,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404838/

相关文章:

python-2.7 - | =(管道等号)符号在python中做什么?

python - 车载摄像头车牌检测

python - Django form.is_valid 不断抛出 KeyError

python - 如何使用 MongoDB 2.4 对 2d 或 2dsphere 索引字段使用常规查询

python - 如何编写大量嵌套的 'for' 循环(递归)

windows - 套接字 : Client was disconnected or not?

c++ - 在服务器套接字上获取随机 10060(连接超时)错误

javascript - Socket.io 在使用命名空间时不发出/接收事件

python - 在python中查找列表的所有子列表

python - 在 for 循环中使用 string.punctuation 替换字母