37,719
社区成员
发帖
与我相关
我的任务
分享
#!/usr/bin/python2.7
import select
import socket
class Client:
REQUEST_FMT = "HEAD %s HTTP/1.1\r\nHost: localhost\r\nAccept: *\r\n\r\n"
def __init__(self, uri):
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._sock.setblocking(False)
self._uri = uri
try:
self._sock.connect(("127.0.0.1", 801))
except socket.error, e:
if e.errno != 115:
raise e
def fileno(self):
return self._sock.fileno()
def test(self):
data = Client.REQUEST_FMT % self._uri
self._sock.send(data)
def judge(self):
print "HEHE %s" % self._sock.recv(1024)
if __name__ == "__main__":
dispatcher = select.select
a = Client("/test.flv")
b = Client("/50x.html")
data = {}
data[a.fileno()] = a
data[b.fileno()] = b
read_set = set((a, b))
write_set = set()
while len(data) != 0:
r_list, w_list, e_list = dispatcher(read_set, write_set, (), 30)
print "len(r_list)=%d" % len(r_list)
for i in r_list:
read_set.remove(i)
try:
i.test()
except socket.error, e:
print "HOLE SHIT!! %s" % e
else:
write_set.add(i)
for i in w_list:
write_set.remove(i)
i.judge()
if len(read_set) == 0 and len(write_set) == 0:
break
#!/usr/bin/python2.7
import select
import socket
class Client:
REQUEST_FMT = "HEAD %s HTTP/1.1\r\nHost: localhost\r\nAccept: *\r\n\r\n"
def __init__(self, uri):
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._sock.setblocking(False)
self._uri = uri
try:
self._sock.connect(("127.0.0.1", 801))
except socket.error, e:
if e.errno != 115:
raise e
def fileno(self):
return self._sock.fileno()
def test(self):
data = Client.REQUEST_FMT % self._uri
self._sock.send(data)
def judge(self):
print "HEHE %s" % self._sock.recv(1024)
if __name__ == "__main__":
dispatcher = select.select
a = Client("/test.flv")
b = Client("/50x.html")
data = {}
data[a.fileno()] = a
data[b.fileno()] = b
read_set = set((a, b))
write_set = set((a,b))
while len(data) != 0:
r_list, w_list, e_list = dispatcher(read_set, write_set, (), 30)
print "len(r_list)=%d" % len(r_list)
print "len(w_list)=%d" % len(w_list)
for i in r_list:
read_set.remove(i)
try:
i.judge()
except socket.error, e:
print "HOLE SHIT!! %s" % e
else:
write_set.add(i)
for i in w_list:
write_set.remove(i)
i.test()
if len(read_set) == 0 and len(write_set) == 0:
break
运行结果(马上出结果,没有timeout):
len(r_list)=0
len(w_list)=2
len(r_list)=1
len(w_list)=0
HEHE HTTP/1.1 404 Not Found
server: ecstatic-0.4.5
Content-Type: text/plain
Date: Wed, 11 Jun 2014 12:49:22 GMT
Connection: keep-alive
len(r_list)=0
len(w_list)=1
len(r_list)=1
len(w_list)=0
HEHE HTTP/1.1 404 Not Found
server: ecstatic-0.4.5
Content-Type: text/plain
Date: Wed, 11 Jun 2014 12:49:22 GMT
Connection: keep-alive
len(r_list)=0
len(w_list)=1