【发布时间】:2013-01-29 00:51:40
【问题描述】:
你知道为什么这个循环没有中断吗?
#!/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 时)不会停止,它会一直等待。我怎样才能阻止它? 谢谢
【问题讨论】:
-
客户端没有关闭/关闭套接字,也许?
-
你确定它不会因为套接字没有收到任何数据而简单地挂在
conn.recv(16)吗? -
是的,客户端不会关闭套接字,因为它会等待答案...
-
记住套接字默认是阻塞的,所以如果没有什么可以接收,那么
recv会阻塞等待。 -
我知道...问题是客户端和服务器都是我们老师给的,那我们就必须写一个代理。当客户端发送请求(类似 http 的请求)时,它不会关闭套接字......并等待答案。代理必须从服务器获取 html 页面并将其发送给客户端。那么,为了不阻塞地从客户端获取请求,我应该执行一个 recv(n) 并决定一个相当大的 n 吗?
标签: python python-sockets