UDP-用于远程连接的服务器和客户端 ip

UDP- server and client ip for for far connection

我用带有 udp 套接字的 blender 游戏引擎构建了一个网络游戏,我有 server.blend 和 client.blend。在我家里,游戏运行良好,连接也很好..但是当我将 client.blend 发送给朋友时,他无法连接到我的服务器..

这是我的服务器构造函数:

class Server:

def __init__(self, host="", port= 9017):

    self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    self.socket.setblocking(False)
    self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.socket.bind((host, port))

这是我客户的构造函数:

class Client:

def __init__(self, server_ip="192.168.1.12", server_port= 9017):

    self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    self.socket.setblocking(False)

    self.serv_addr = (server_ip, server_port)

我认为由于 IP 地址的原因,它无法在我朋友的计算机上运行。

有人知道问题出在哪里吗?

您使用的硬编码 IP 是 RFC 1918 私有 IP 地址,无法通过 Internet 路由。如果您的朋友连接到与您相同的局域网,他很可能能够连接到您的服务器。从根本上说,这归结为网络问题。

可能的解决方案是在您的应用程序中定义一个主机名,并使用 DynDNS 提供商将该主机名注册到您路由器的 public IP。然后在您的家庭路由器上设置端口转发,以允许从 Internet 连接到您需要的 udp 端口​​上的服务器。还有一千种其他方法可以解决类似的问题,但实际上这属于网络领域而不是编程领域。