Skip to main content
 首页 » 编程设计

python:使用 socket.recv() 循环

2025年05月04日1352php

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

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

请您参考如下方法:

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

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