作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是编程和这个网站的新手,所以我希望我能澄清我正在尝试做什么。如果我发送字符串退出,我会尝试打破一个循环。似乎就这样继续下去。请帮忙!
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/
我是一名优秀的程序员,十分优秀!