python: 使用socket.recv()的循环
你知道为什么这个循环不停止吗?
#!/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(data) 等于 0 时)就是不停止,一直在等待。我该怎么才能让它停止呢?谢谢!
2 个回答
1
你可以试着设置一个超时时间,具体可以参考这个链接:Python socket在循环中接收数据不停止
3
一种解决办法是把这个“插座”(socket)设置成非阻塞模式。这样的话,你就可以在一个循环里不断接收数据,直到没有更多的数据为止。如果没有收到任何数据(也就是说request
是空的),那就说明连接已经关闭了;如果有数据,那你就得到了请求。
当你得到了请求后,就把它发送到真正的服务器上,然后在等待回复的时候也用同样的方法。最后,把回复发送给客户端。