Python 2.7:while循环,无法突破

时间:2015-05-22 19:49:45

标签: 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 

我能够很好地发送和接收邮件,但是当我发送退出邮件时,或者“退出”邮件它只是继续前进。我究竟做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:4)

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

  

如果套接字上没有可用消息,则接收呼叫等待   要收到的消息,除非套接字是非阻塞的

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

因此,要么处理字节流所带来的所有影响,要么学习像recv这样的系统调用的行为,要么使用更高级别的消息库来隐藏所有这些细节。

答案 1 :(得分:0)

Python recv需要特别小心,等待所有请求的数据都可用。您可以使用os.fdopen(s.fileno())来获取file对象,然后在套接字上使用普通的readwrite函数。

答案 2 :(得分:-1)

您忘记将收到的值解码为字符串。您可以执行类似

的操作
if data.decode("UTF-8") == 'quit':
   break