使用套接字模块的Python简单服务器
下面是一个使用套接字模块的简单python服务器:使用套接字模块的Python简单服务器,python,sockets,networking,Python,Sockets,Networking,下面是一个使用套接字模块的简单python服务器: import socket import sys HOST = '' PORT = 8008 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) try: s.bind((HOST,PORT)) except socket.error as msg: print 'Bind failed. Error code : %s , Message : %s'%(msg[0],msg
import socket
import sys
HOST = ''
PORT = 8008
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.bind((HOST,PORT))
except socket.error as msg:
print 'Bind failed. Error code : %s , Message : %s'%(msg[0],msg[1])
sys.exit()
print 'Socket bind complete!'
s.listen(10)
socket.setdefaulttimeout(3)
l = set()
while True:
try:
a = s.accept()
print 'Connected with %s:%d'%a[1]
l.add(a)
except:
print 'Accept error!'
for a in l:
b = a[0].recv(4096)
if b:
print 'From %s:%d'%a[1]+' recv: %s'%b
第一次是正确的(客户端连接),但第二次程序卡住了
Socket bind complete!
Connected with 127.0.0.1:52093
From 127.0.0.1:52093 recv: aasdf
_
(STUCK)
怎么了?
请为我指出问题所在乍一看,如果创建另一个套接字,您的程序在尝试从您打开的第一个套接字读取数据时将无休止地挂起
recv()
在一个连接上阻塞,直到数据可用,但它在获得数据时打印出来for
循环中,您试图从中recv()
,这将永远阻塞其他方面,
%
格式在Python3中很难看,不推荐使用.format()
,它从2.6开始就在Python中使用。第一次和第二次之间有什么变化?很抱歉,我不清楚。我指的是第二个客户端连接。