【问题标题】:socket programing cant connect to another network套接字编程无法连接到另一个网络
【发布时间】:2012-10-21 22:33:35
【问题描述】:

我最近使用套接字在 python 中编写了一个客户端/服务器对,但问题是客户端没有连接到另一个网络上的服务器。我尝试了端口转发并使内部 IP 地址成为静态,这是一个真正困扰我的问题我是否需要外部/公共 IP 地址来使客户端连接,如果是这种情况,当 ISP 更改我的外部 IP 地址时该怎么办。请给点建议,谢谢。

code:

PORT=8888
srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
srvsock.bind( ('', PORT) )
srvsock.listen( 10 )
print 'server now listening on PORT '+str(PORT)

while 1:

  clisock, (remhost, remport) = srvsock.accept()
  dl_information_file="server.txt"
  if os.path.exists(dl_information_file):
      f=open('server.txt','rb')
      read=f.read()
      clisock.send( read )
      f.close()

【问题讨论】:

  • 你不需要公共 IP 地址来与套接字通信,但你必须发布你的代码(或相关部分),否则没有人可以帮助你。
  • 基本的网络设置也会有所帮助。 1. 服务器所在的网络 IP 地址、子网掩码等与客户端所在的网络相同。这个网络之间是否可以进行其他通信,它们是如何连接的......?

标签: python sockets ip-address portforwarding


【解决方案1】:

客户端和服务器是在本地网络上,还是客户端和服务器被 Internet 分开?

如果服务器在 NAT 后面的机器上运行,您必须对其进行端口转发,并确保该机器的 IP 是静态的,或者您使用更新后的 IP 更新客户端。

如果服务器在您自己的网络中,您可以使用socket.gethostbyname(socket.getfqdn()) 获取您的接口的IP(注意,您可能有多个)并使用该IP 来绑定套接字。

您也可以使用 WireShark 对连接进行故障排除 - 您可以查看哪些数据包正在离开您的客户端以及哪些数据包正在进入您的服务器。

如果没有更多的代码和网络上的更多信息,真的很难说 - 它可能是防火墙,可能是 NAT,也可能是配置错误的接口。

edit: 看来您正在将套接字绑定到'',这意味着它应该绑定到本地主机端口,这意味着服务器侦听本地环回(127.0 .0.1)。运行服务器的任何其他机器都无法访问此接口。 您应该在脚本的变量中使用静态配置的 IP,或者使用 socket.gethostbyname(socket.getfqdn()))

【讨论】:

  • 如何实现socket.gethostbyname(socket.getfqdn())),谢谢
  • 这是一个例子:srvsock.bind ((socket.gethostbyname(socket.getfqdn()), PORT))。请记住,此方法解析 getfqdn() 提供的主机名的 IP,然后获取第一个接口的主机名,这可能不是您正在寻找的正确接口 - 如果您有 hamachi 或 virtualbox,可能会发生这种情况例如。另一种解决方案是检查服务器的 IP 并将其手动提供给脚本中的绑定函数。
  • 可以绑定静态ip吗
  • 我假设服务器位于 NAT 后面。如果是,那么是的,您可以检查本地网络上服务器的 IP,将服务器绑定到该 IP,然后在路由器上设置端口转发。我相信这应该可行。
  • '' 表示 INADDR_ANY。这并不意味着本地主机。绑定到解析为私有地址的主机名并不能解决 OP 的问题(通过 Internet 通信)。
【解决方案2】:

首先,尝试在同一台计算机上同时运行服务器和客户端(连接到本地主机)

如果可行,您的问题与端口转发有关。 见:how to portforward

【讨论】:

  • 它在同一台计算机和同一网络上运行,但通过 Internet 发生故障。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 2020-06-09
  • 2013-07-24
  • 2014-06-16
相关资源
最近更新 更多