Python线程服务器只服务一次

时间:2013-01-15 16:24:09

标签: python sockets webserver

尝试创建线程化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()

2 个答案:

答案 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()