Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 无法在简单python套接字程序中使用来自客户端的ip地址进行连接_Python 3.x_Sockets_Networking_Websocket_Ip - Fatal编程技术网

Python 3.x 无法在简单python套接字程序中使用来自客户端的ip地址进行连接

Python 3.x 无法在简单python套接字程序中使用来自客户端的ip地址进行连接,python-3.x,sockets,networking,websocket,ip,Python 3.x,Sockets,Networking,Websocket,Ip,老实说,这或多或少是从python上的网络教程中提出来的- 服务器程序: import socket # Import socket module dd="You connected sucessfully to the server" dd1=bytes(dd,'UTF-8') s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # Create a socket object

老实说,这或多或少是从python上的网络教程中提出来的-
服务器程序:

import socket               # Import socket module
dd="You connected sucessfully to the server"
dd1=bytes(dd,'UTF-8')
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print ('Got connection from', addr)
   c.send(dd1)
   c.close()                # Close the connection
客户端:

import socket               # Import socket module

s = socket.socket(socket.AF_INET)         # Create a socket object
host = '80.78.xxx.xxx' # Get local machine name/value
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print(s.recv(102004))
s.close()                     # Close the socket when done
所以,我可以在同一台电脑上运行它并得到结果。如果我对代码的理解是正确的,那么host就是localhost。但当我尝试使用ip地址访问它时,它也应该工作。但事实并非如此。请帮忙。它返回错误:错误10060 我将端口12340到12350转发到路由器上的ip地址。删除所有防火墙。然而这种情况发生了


当我尝试使用node.js建立网站时,也发生了类似的错误。在本地主机上运行良好,但在我尝试使用公共IP地址访问时不起作用。我很困惑,如果您能指出任何文献以获得更深入的理解,我会很高兴。

“但当我尝试使用ip地址访问它时,它也应该起作用。”-localhost的ip地址是127.0.0.1,而不是80.78.xxx.xxx。通过外部IP访问需要在路由器上进行端口转发,路径中没有防火墙,可能需要支持或NAT发夹。@SteffenUllrich,很抱歉我在问题中没有提到。但我确实移除了所有的防火墙。我“关闭/关闭”了防火墙。我已将端口分配给我的ip地址。我仍然遇到同样的问题。你能详细介绍一下NAT发夹吗?我假设你试图通过外部IP地址从同一网络内部到达一个内部系统。要做到这一点,你的NAT路由器必须支持——有些支持,有些不支持。@SteffenUllrich-wow,非常好的信息,谢谢。最后一个问题,如果客户端与另一个ISP在不同的路由器上运行,它会工作吗?很难说到底发生了什么。您显示的代码很好。因此,一定有你没有表现出来的错误。您可以尝试通过执行数据包捕获(例如使用Wireshark)来缩小问题范围,以查看传出和传入的数据包,并根据您的期望检查这些数据包。