标题说全部。我有一个客户端和一个服务器设置,但它们只能与localhost一起使用。如何从其他网络连接到套接字?
客户端
# Echo client program
import socket
print "Client"
HOST = "localhost" # Symbolic name meaning all available interfaces
PORT = 5001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST,PORT))
while True:
data2 = raw_input()
s.sendall(data2)
服务器
# Echo server program
import socket
print "Server"
HOST = "" # Symbolic name meaning all available interfaces
PORT = 5001 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
print data
if data == "Ping":
print "Pong!"
conn.close()
答案 0 :(得分:0)
现在如果你在dsl路由器后面(通常是你),这些地址是完全不同的。因此,每当连接尝试接收到TCP端口XXXX时,必须告诉路由器发送,将其转发到“我的机器”(称为端口转发)。虽然端口转发设置在大多数路由器中类似,但是没有标准(通常在路由器Web配置界面上的NAT /端口转发菜单项下)。您可能必须搜索特定型号的说明。最好将您的计算机设置为在端口转发之前使用静态IP地址。否则,如果您的计算机通过DHCP分配了另一个IP地址,则设置将无效。
如果端口转发成功,现在您只需将客户端应用程序设置为连接到公共IP地址。在您的特定情况下,您的客户端源代码中的HOST =“X.X.X.X”。检查端口转发是否适用于您从某处下载的套接字测试器应用程序。 (不要用你的实验代码测试它,使用你确定它正在工作的应用程序)。一切都行不通,请查看下面的说明。不过,这是最后的手段。
注意:为了安全起见,有些ISP会将其客户置于额外的防火墙之外。检测是否存在这种情况的简单方法是,您在路由器Web界面中看到的Wan ip地址将与您在whatsmyip等在线工具中看到的不同。在这种情况下,无论你做什么,你都无法连接。您必须致电您的ISP并告诉他们为您的连接禁用防火墙。你可能有一些困难来解释他们你在说什么:)。