C#Console-Application通过互联网配对

时间:2016-07-08 19:53:41

标签: c# tcp tcpclient

我想构建一个类似于应用程序的C#聊天,您可以在其中输入字符串到客户端控制台并在服务器控制台中接收它。

我的意思是:用户B在其计算机上执行客户端程序,该计算机位于用户A以外的任何位置。客户端程序通过TCP连接到服务器程序,该程序在其计算机上打开了用户A.当用户B在程序中输入字符串并按Enter键时,用户A应通过Internet接收该字符串。

我有类似的东西:

服务器:

static void Main(string[] args)
{

    Console.WriteLine("Start Server ...");


    IPAddress b = IPAddress.Any;
    TcpListener Server = new TcpListener(b, 5550);
    Server.Start();
    Console.WriteLine("Server started.");

    Console.WriteLine("Wait for Connection...");
    TcpClient Client = Server.AcceptTcpClient();
    Console.WriteLine("Succeeded");

    Stream MessageStream = Client.GetStream();

    while (true)
    {
        byte[] message = new byte[4096];
        int bytesRead;
        try
        {
            bytesRead = MessageStream.Read(message, 0, 4096);

            ASCIIEncoding encoder = new ASCIIEncoding();
            Console.WriteLine(encoder.GetString(message, 0, bytesRead));
        }

        catch (IOException)
        {
            break;
        }
    }

    Client.Close();
    Server.Stop();
}

客户端:

static void Main(string[] args)
{
    IPAddress IP = IPAddress.Parse("192.168.2.140");
    TcpClient Client = new TcpClient();
    Client.Connect(IP, 5550);

    Stream MessageStream = Client.GetStream();
    Console.WriteLine("Success");

    ASCIIEncoding encoder = new ASCIIEncoding();

    Console.WriteLine("Enter Text here");

    var input = Console.ReadLine();
    if(input != null)
    {
        byte[] buffer = encoder.GetBytes(input);

        MessageStream.Write(buffer, 0, buffer.Length);
        MessageStream.Flush();
    }

    Console.ReadLine();
}

当我在我的电脑和笔记本电脑上的服务器上执行客户端时,它运行正常,但它如何与我本地网络外的计算机一起使用?

当我更换时 IPAddress IP = IPAddress.Parse("192.168.2.140"); 使用WAN IP,我从canihazip.com获得,它不想连接。

编辑:

我想是启用了端口转发功能 Port Forwarding

问题是:它在我家的本地网络中工作,我想要它连接,我可以写一个文本,它显示在服务器应用程序中。但当我问我的一些朋友尝试这个时,他们无法连接到我的服务器..

1 个答案:

答案 0 :(得分:0)

您需要转到路由器的管理界面,并将某些端口上的连接从Internet转发到网络后面的系统的IP地址。这将完全取决于您的路由器,快速谷歌搜索将告诉您需要知道什么。

从OP编辑更新:

因此,您可以通过公共端口使用公共IP访问它,并将系统设置为在LAN端口上侦听。另一个有用的帮助是使用免费的动态DNS服务,例如我之前使用过的duckdns.com,发现它很好且很容易,以获得一个总是映射到你的公共IP地址的实际名称。 - 如果您没有从ISP购买静态IP地址 - 是动态的,将来会改变。