我在 Python 2.7.x 中创建了一个基本的客户端服务器套接字程序,即使在不同的机器上,它也可以在同一网络上运行,但是当我在不同的网络上运行服务器和客户端时(服务器在我朋友的网络上,而客户端在我的网络上)它不返回任何错误并继续等待。我只是不明白如何调试代码。我通过终止端口 80 上的所有服务来使用端口 80。我还在两台机器上的端口 80 上完成了端口转发。
我的代码如下:
客户端.py
import socket
s = socket.socket()
host = '103.47.59.130'
port = 80
s.connect((host, port))
while True:
print "From Server: ", s.recv(1024) #This gets printed after sometime
s.send(raw_input("Client please type: "))
s.close()
服务器.py
import socket
s = socket.socket() # Create a socket object
host = '192.168.0.104' #private ip address of machine running fedora
port = 80
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr #this line never gets printed
while True:
c.send(raw_input("Server please type: "))
print "From Client: ", c.recv(1024)
c.close()
它有时会输出 **From Server: ** 但不会来回发送任何消息。
PS: 我之前在 Stack Overflow 上搜索过,但找不到任何相关内容。
原文由 Sanyam Jain 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用此 软件 实现端口转发。我建议您为您的服务器使用另一个端口,比如 5006,以防止与使用 80 等非常常用的端口相关的任何问题。基本上,该软件是这样工作的:
因此,您的客户端所要做的就是将数据发送到您服务器的公共 IP,特别是端口 5001。这些数据当然会首先到达您的路由器,路由器将按配置运行并将所有内容转发到您服务器的端口 5006。所有这些仅当您的互联网网关支持端口转发时才有效。
客户:
服务器: