Python 2.7: while循环,无法跳出
Python 2.7: While loop, can't break out
我是编程新手和这个网站的新手,所以我希望我能澄清我正在尝试做什么。如果我发送字符串退出,我有一个循环我试图打破。它似乎只是继续前进。请帮忙!
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
我能够很好地发送和接收消息,但是当我发送退出时,或者 'quit' 它会继续发送。我究竟做错了什么?
谢谢!
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
此外,这是问题的第二部分,如果您尝试通过连接发送 消息 ,则需要发明一种分隔消息的通信协议。否则 data
永远不会只是 'quit'
.
因此,要么处理字节流的所有含义并了解 recv
等系统调用的行为方式,要么使用对您隐藏所有这些细节的更高级别的消息传递库。
您忘记将接收到的值解码为字符串。你可以做类似
的事情
if data.decode("UTF-8") == 'quit':
break
Python recv
特别注意等待所有请求的数据可用。您可以使用 os.fdopen(s.fileno())
来获取 file
对象,然后在套接字上使用正常的 read
和 write
函数。
我是编程新手和这个网站的新手,所以我希望我能澄清我正在尝试做什么。如果我发送字符串退出,我有一个循环我试图打破。它似乎只是继续前进。请帮忙!
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
我能够很好地发送和接收消息,但是当我发送退出时,或者 'quit' 它会继续发送。我究竟做错了什么?
谢谢!
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
此外,这是问题的第二部分,如果您尝试通过连接发送 消息 ,则需要发明一种分隔消息的通信协议。否则 data
永远不会只是 'quit'
.
因此,要么处理字节流的所有含义并了解 recv
等系统调用的行为方式,要么使用对您隐藏所有这些细节的更高级别的消息传递库。
您忘记将接收到的值解码为字符串。你可以做类似
的事情if data.decode("UTF-8") == 'quit':
break
Python recv
特别注意等待所有请求的数据可用。您可以使用 os.fdopen(s.fileno())
来获取 file
对象,然后在套接字上使用正常的 read
和 write
函数。