我正在运行UDP服务器和客户端(python)。当在同一本地网络内时,客户端能够与服务器通信。但是,当服务器IP地址设置为路由器的IP地址(其UDP端口转发到服务器)时,客户端根本无法与服务器通信。我想知道是否有人可以指出为什么这在本地网络(在不同的机器上)工作但我无法使客户端和服务器连接的路由器的外部IP地址连接到服务器。
客户端的代码
import socket
import sys
HOST, PORT = "<IP address of router which is port forwarded to server>", 5000
data = " Hello from Client" #.join(sys.argv[1:])
# SOCK_DGRAM is the socket type to use for UDP sockets
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# As you can see, there is no connect() call; UDP has no connections.
# Instead, data is directly sent to the recipient via sendto().
sock.sendto(data + "\n", (HOST, PORT))
received = sock.recv(1024)
print "Sent: {}".format(data)
print "Received: {}".format(received)
服务器代码
import SocketServer
class MyUDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print "{} wrote:".format(self.client_address[0])
print data
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "<local IP address of server", 5000
server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
server.serve_forever()
答案 0 :(得分:0)
好的,我弄清楚发生了什么。
路由器连接到两台计算机 - 计算机A和计算机B.计算机A可以使用本地网络(UDP服务器客户端)与计算机B通信。但是,当计算机A(UDP客户端)使用路由器端口转发到计算机B的路由器IP地址(外部IP地址)向计算机B(UDP服务器)发送数据时,它无法正常工作。显然,当客户端使用外部IP地址时,服务器将只接受来自本地网络外部的连接