python ThreadedTCPServer只能访问Windows 7上的本地连接

时间:2013-09-15 01:49:07

标签: python multithreading sockets tcp

我正在使用ThreadedTCPServer来启动TCP服务器。这是代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import threading
import SocketServer
import time

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        recv1 = self.request.recv(1)
        print "server: %s" % recv1


class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass



if __name__ == "__main__":
    server = ThreadedTCPServer(('0.0.0.0', 8080), ThreadedTCPRequestHandler)

    print server.server_address

    # Start a thread with the server -- that thread will then start one
    # more thread for each request
    server_thread = threading.Thread(target=server.serve_forever)
    # Exit the server thread when the main thread terminates
    server_thread.daemon = True
    server_thread.start()
    print "Server loop running in thread:", server_thread.name


    time.sleep(30)


    server.shutdown()
    print "end"

我正在使用Windows7(IP:192.168.1.180)/Python2.7,启动程序时,我可以从本地telnet服务器,但是从另一台机器上,我无法telnet成功。

> telnet 192.168.1.180 8080

但是,我在Linux上运行该程序,它工作正常。我可以从另一台机器成功远程登录。

为什么在Windows7上它无法接收远程连接?我在运行期间检查了windows7上的网络状态:

C:\Users\Henry>netstat -ant | findstr 8080
TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       InHost

抱歉,问题解决了。这是一个环境问题。它被Windows7防火墙阻止。

1 个答案:

答案 0 :(得分:1)

您的程序似乎正在正确地监听连接。从超级用户的堆栈交换看这篇文章,看来你的配置是正确的。看到: https://superuser.com/questions/386436/the-meaning-of-port-0-in-netstat-output

如果您的脚本在一个地方而不是另一个地方工作,我会看一下环境差异。由于您的客户端无法连接到服务器,我猜你会得到某种连接拒绝错误。

您的Windows防火墙(或其他第三方防火墙)是否阻止端口8080上的入站连接?这似乎很可能因为它是Web服务器常用的端口。