尝试创建线程化http服务器。当我通过webbrowser连接到这个服务器,虽然我只能在服务器停止之前拉出一个东西。这有什么特别的原因会发生吗?
import socket
from threading import Thread
class http():
def __call__():
return 0
def site(self):
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 5124))
s.listen(2)
except socket.error, (value,message):
if s:
s.close()
return 2
c, addr = s.accept()
s = c.recv(1024)
print s
c.send("test")
c.close()
return s
serve = http()
def happy():
while True:
serve.site()
if __name__ == '__main__':
Thread(target = happy()).start()
答案 0 :(得分:1)
尝试target = happy,没有括号。
答案 1 :(得分:1)
当连接关闭并且您尝试在套接字离开TIME_WAIT
状态之前重新连接时,会出现问题。尝试使用socket.SO_REUSEADDR
套接字选项或每次使用随机端口。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 1234))
s.listen(2)
print 'listening on port %s' % s.getsockname()[1]
while True:
c, addr = s.accept()
buf = c.recv(1024)
c.send(buf)
c.close()