C#/winforms 中的客户端/服务器聊天程序 IP 地址问题



我正在尝试制作一个winforms客户端/服务器聊天应用程序。我已经有一个客户端和一个服务器,两者都工作正常,我可以登录,发送消息等。 问题是它只有在我连接到本地 IP 时才有效。当我尝试使用外部IP运行该程序时,出现以下错误:

"The requested address is not valid in its context".

换句话说,我可以在自己的计算机上运行服务器,启动(例如(3 个客户端并让它们连接到正在运行的服务器。这基本上意味着我在自言自语。我试图做的是在我的计算机上运行聊天服务器,并让其他人运行客户端程序并通过互联网连接到服务器。

这是我输入外部IP时出现错误的部分:

public void StartListening()
    {
        // Get the IP of the first network device, however this can prove unreliable on certain configurations
        IPAddress ipaLocal = ipAddress;
        // Create the TCP listener object using the IP of the server and the specified port
        tlsClient = new TcpListener(ipaLocal, 50702);
        // Start the TCP listener and listen for connections
        tlsClient.Start(); <--- THINGS GO SOUTH HERE
        // The while loop will check for true in this before checking for connections
        ServRunning = true;
        // Start the new tread that hosts the listener
        thrListener = new Thread(KeepListening);
        thrListener.Start();
    }

不确定我正在尝试做的事情是否可能? 我无法想象是这样,但我有点不知道如何进行。我是网络编程的新手,所以任何帮助将不胜感激。

亲切问候珍

Jane,

我认为您的问题出在您的 IP 地址设置上。这是网络连接问题。你需要外部 IP 地址,以便外部客户端可以联系你的电脑。您需要更高级的网络。您的 ISP 提供的 IP 地址用于家庭用途。您需要专门的公共 IP 地址,以便客户端可以在防火墙外部找到您。这是网络/ISP/外部IP问题。

服务器应用程序需要侦听指定端口上、指定本地安装的 NIC 上的传入连接。这就是为什么TcpListener总是需要使用本地IP地址创建的原因:因为它只关心它应该使用哪个NIC(如果你安装了多个(。

TcpListener的 MSDN 页面也明确指出:

TcpListener 构造函数 (IPAddress, Int32( 初始化 TcpListener 类的新实例,该实例侦听指定本地 IP 地址和端口号上的传入连接尝试。

外部 IP 地址与 TCP/IP 服务器完全无关。在此过程中,您可以拥有许多路由器和网络设备,然后可以将传入的连接转发到您的计算机。

只需确保您的防火墙和路由器配置正确,以允许指定端口上的传入连接。为此,请启动TCP/IP服务器以打开端口,然后使用CanYouSeeMe之类的服务来查看是否可以从外部访问服务器。

关于您的评论(在某些配置上这可能不可靠(,当您考虑它时,它显然是"不可靠的":笔记本电脑可以轻松拥有与 Wifi 网络适配器完全不同的 IP 地址的以太网网络控制器。你的服务器应用应允许用户选择要使用的 IP 地址,而不是选择它获得的第一个地址。

最新更新