我正在尝试制作一个简单的服务器/客户端程序对。 在局域网上他们工作正常,但当我尝试从“外部”连接时,它表示连接被拒绝。我关闭了两台机器上的防火墙,但我仍然无法连接,我再次检查了ip。
我做错了什么?
由于
杰克
代码:
import socket
host = ''
port = 9888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
conn, adrr = s.accept()
conn.send("Hello, world!")
s.close()
Client:
import socket
host = '68.x.x.x'
port = 9888
s = socket.socket(socket.AF_INET, socket_SOCK_STREAM)
s.connect((host,port))
print s.recv(200)
s.close()
答案 0 :(得分:2)
您有两个可能的问题之一。
调试此方法的方法是尝试排除一个。如果我们可以摆脱代码问题,那么我们就知道这是一个网络问题。
获取您知道可用的套接字服务器和客户端,然后将它们作为独立程序进行尝试。防火墙内外。 Go to this site并下载示例。更改客户端和服务器中的端口,编译并运行它们。首先在网络中的同一台机器上,然后是同一网络上的两台机器,然后是内部的服务器和网络外部的客户机。
答案 1 :(得分:1)
你传递给服务器套接字的.bind
调用的参数怎么样?这是唯一可能的原因 - 例如如果您对192.168.x.y
和x
或y
的任何值使用10.x.y.z
,那么这只是一个本地网络地址,不是由网络间路由器路由的互联网约定(大多数路由器可以编程为将一些传入的数据包转发到特定的本地网络地址,通常取决于端口,但这非常特定于路由器的品牌和型号)。