python:使用socket.recv()循环

时间:2013-02-13 12:59:41

标签: python python-sockets

你知道为什么这个循环没有破坏吗?

#!/usr/bin/env python

from socket import *
import os
import sys

if __name__ == '__main__':
 HOST = '127.0.0.1'
 PORT = 55554

 print 'Creating socket'
 socketProxy = socket(AF_INET, SOCK_STREAM)

 print 'bind()'
 socketProxy.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
 socketProxy.bind((HOST, PORT))

 print 'Waiting for connection request'
 socketProxy.listen(1)
 conn, addr = socketProxy.accept()

 print 'Connected to ', addr

 request = ''

 while True:
    data = conn.recv(16);
    if not data: break
    request = request+data


print request
sys.stdout.flush()

我正在编写一个小型服务器代理获取可以任意长的请求,所以我必须等到收到所有请求。无论如何,这个循环(当len(数据)== 0)没有停止并且它一直在等待。我怎么能阻止它? 感谢

2 个答案:

答案 0 :(得分:1)

一种解决方案是使套接字无阻塞。然后在循环中收到,直到不再收到数据。如果没有收到任何数据(即request为空),则表示连接已关闭,否则您有请求。

当您收到请求时,请将其发送到实际服务器,并在等待回复时执行与上述相同的操作。将回复发送给客户。

答案 1 :(得分:0)

您可以尝试设置超时时间,请参阅Python socket recv data in while loop not stopping