Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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
如何通过internet使用我的C#messenger?_C#_.net_Messenger - Fatal编程技术网

如何通过internet使用我的C#messenger?

如何通过internet使用我的C#messenger?,c#,.net,messenger,C#,.net,Messenger,我用c#编写了一个简单的本地messenger,供自己使用。现在,它可以在本地网络(lan、wifi)上正常工作。 现在我想把它给我的朋友,并在互联网上使用它,但不知道如何使用不同的ip除了本地主机 如果有任何帮助,我将不胜感激。 提前谢谢 这是客户部分 public ChatServer(IPAddress address) { ipAddress = address; } private Thread thrListener; p

我用c#编写了一个简单的本地messenger,供自己使用。现在,它可以在本地网络(lan、wifi)上正常工作。 现在我想把它给我的朋友,并在互联网上使用它,但不知道如何使用不同的ip除了本地主机

如果有任何帮助,我将不胜感激。 提前谢谢


这是客户部分

    public ChatServer(IPAddress address)
    {
        ipAddress = address;
    }

    private Thread thrListener;

    private TcpListener tlsClient;

    bool ServRunning = false;

    public static void AddUser(TcpClient tcpUser, string strUsername)
    {
        ChatServer.htUsers.Add(strUsername, tcpUser);
        ChatServer.htConnections.Add(tcpUser, strUsername);

        SendAdminMessage(htConnections[tcpUser] + " has joined us");
    }
还有这个服务器部件。

Intro 为了让另一个用户连接到您的计算机,您需要做很多事情。希望这能起作用,但网络通常会变得复杂,并非所有网络都运行相同。我想你是在某种你可以访问的路由器后面运行这个。网络是复杂的,这就是为什么这个答案如此之长的原因(如果你在阅读剩下的部分时问自己)。在大多数情况下,这是相当直截了当的,但可能需要一些时间

在开始之前,请先回答:

预警 从安全角度考虑,就像计算机和网络上的几乎所有东西一样,实际上并没有所谓的“完全安全”(至少据我所知)。与联网一样,打开端口并不完全安全。我不是一流的安全专家,但这样做,你就允许其他计算机使用你的计算机发送和接收数据。在你只进行简单的文本聊天的情况下,这应该是安全的,但在其他情况下,这可能不一样。在处理SSH和FTP等更复杂、更重要的情况下,涉及的安全性更高。作为一个警告,请确保在干扰网络或一般计算机时小心

开始 无论如何,(如果我还没有吓跑你的话)我必须采取以下步骤才能让你的聊天服务器正常工作:


转发路由器上的端口 你要做的第一件事就是转发或打开路由器上的端口。好吧,在你能做到这一点之前,你需要了解一些关于网络的事情:

基本上,路由器是将计算机网络连接到internet并允许通过端口进行连接的设备。如果你不明白端口是什么,它是用来连接互联网的,基本上就像街道地址的门牌号一样。它告诉你房子在那条街上的什么地方,而且比街道地址更具体。就网络而言,这是一个数字,它告诉了通信的具体地点。端口号(“门牌号”)指示计算机IP地址(“街道地址”)上的连接位置

具体地说,端口号是一个16位无符号整数,范围从0到65535(但端口号0实际上不能根据使用),即使这是一个16位无符号整数,在C#中使用a或a时,它将是
ushort
UInt16
,它们改为使用有符号32位整数,这是标准的
int
Int32
。此外,端口通常在IP地址后用冒号(“
”)表示,例如
123.45.67.89:80
,但在其他情况下可能有所不同。这是使用IPv4,但也有IPv6,我还没有使用过

现在,转发端口怎么样?为什么需要这样做?转发端口的作用是将到路由器上某个端口的连接转发到路由器后面的计算机。因为路由器公司有不同的方法来实现这一点,所以并不总是有简单、直接和直接的方法。一般来说,为了解决这个问题,你可以在谷歌上搜索如何转发特定路由器上的端口的说明,例如,你可以搜索“路由器公司名称路由器上的转发端口”来找到它。要做到这一点,在开始之前,您可能还需要做一些事情:

  • 您将需要您的路由器管理员用户名和密码,这通常不是(也可能不应该是)用于连接它的用户名和密码。如果你不知道它是什么,安装你的路由器的人应该知道。一旦你有了这个工作,你就准备好继续前进
  • 您可能还需要计算机的本地IP地址,该地址用于在路由器网络中对计算机进行寻址。要找到它,你的路由器可能会告诉你它是什么,但如果你似乎找不到它,这里有一些在Windows上执行的步骤。
  • 打开命令提示符
    • 通过转到
      开始>>运行…
      或按Win+R打开运行对话框
    • 键入
      cmd
      并按enter键
  • 运行
    ipconfig
    ,输入并按enter键查找计算机的IP地址
    • 您应该看到网络接口连接的列表
    • 要找到我们正在寻找的,您需要找到通过路由器连接到internet的网络连接。这在计算机上可能不同,但在我的例子中,它被命名为
      无线局域网适配器无线网络连接
      ,因为我使用的是笔记本电脑。我想,这个名字里面可能有
      LAN
    • 这不应具有:
      媒体状态………:媒体已断开连接
      ,因为您需要连接到路由器。如果你不是,那就这么做吧
    • 相反,应该有
      IPv4地址………:旁边列出了实际计算机的IP地址。这是要转发其端口的计算机的IP地址。当然,如果您使用的是使用IPv6的路由器,这可能会有所不同
此外,在执行此操作的过程中,您正在使用的端口号可能会被其他进程或服务占用。这是好的,很容易修复;您只需更改端口号即可。你会想尝试一种新的方法
    public ChatServer(IPAddress address)
    {
        ipAddress = address;
    }

    private Thread thrListener;

    private TcpListener tlsClient;

    bool ServRunning = false;

    public static void AddUser(TcpClient tcpUser, string strUsername)
    {
        ChatServer.htUsers.Add(strUsername, tcpUser);
        ChatServer.htConnections.Add(tcpUser, strUsername);

        SendAdminMessage(htConnections[tcpUser] + " has joined us");
    }
const int Port = 8500;
tcpClient.Connect(ipAddress, Port)
TcpListener tcpListener =  new TcpListener(ipAddress, Port);