4

你知道为什么这个循环不会中断吗?

#!/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 时)不会停止,它会一直等待。我怎样才能阻止它?谢谢

4

2 回答 2

3

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

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

于 2013-02-13T14:07:49.020 回答
1

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

于 2021-06-24T04:54:27.137 回答