2011-10-19 17 views
1

对于一个类项目,我试图做一些套接字编程Python,但遇到了一个非常基本的问题。我无法从笔记本电脑到实验室机器创建TCP连接。 (我希望用作“服务器”)甚至没有进入我写的脚本,我一直在尝试解释行命令,但没有成功。在实验室机(kh4250-39.cselabs.umn.edu)我键入以下的Python:在Python中启动TCP连接时出现问题 - 阻塞和超时

from socket import * 
sock = socket() 
sock.bind(('', 8353)) 
sock.listen(5) 
sock.accept() 

,然后在我的笔记本电脑I型:

from socket import * 
sock = socket() 
sock.connect(('kh4250-39.cselabs.umn.edu', 8353)) 

在这一点两台机器块在客户超时或我发送SIGINT之前不做任何事情。这段代码几乎完全从我在网上找到的例子以及Mark Lutz的Programming Python(使用''作为服务器主机名显然使用OS默认并且相当常见)书中复制。如果我在计算机中运行两端,并使用'localhost'作为主机名,那么它工作正常,所以我怀疑这是我在一端或两端使用的主机名的问题。我真的不确定这样一个简单的例子会出现什么问题。有人有想法吗?

+0

也许有一个包过滤器或类似的东西涉及。 – glglgl

回答

1

的一个好方法,以确认它是否是一个防火墙问题还是没有对问题进行从命令行一个telnet到目的主机:

% telnet kh4250-39.cselabs.umn.edu 8353 
Trying 128.101.38.44... 

再等等metime后:

telnet: connect to address 128.101.38.44: Connection timed out 

如果它只是在Trying挂在那儿,然后最终超时,很有可能被防火墙阻止特定端口到远程主机的连接。它可以位于网络层(例如真正的防火墙或路由器访问列表),也可以位于主机,例如iptables或其他基于主机的过滤机制。

只能从实验室或校园网络内访问此实验室主机。与您的教授或网络管理员或网络中的“知道”人员进行交谈,以便确定。

0

尝试将服务器绑定到“kh4250-39.cselabs.umn.edu”而不是“”:

sock.bind(('kh4250-39.cselabs.umn.edu', 8353)) 

如果这不起作用:另一个原因可能是防火墙阻止端口8353。 ...

+1

特定的绑定地址将无济于事。他现在绑定到INADDR_ANY。 – EJP