【问题标题】:C# Console-Application paired over internetC# 控制台应用程序通过 Internet 配对
【发布时间】:2016-07-11 01:04:03
【问题描述】:

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

我的意思是:用户 B 在他的计算机上执行客户端程序,该计算机位于用户 A 的任何其他位置。客户端程序通过 TCP 连接到服务器程序,该程序在他的计算机上打开了用户 A。当用户 B 在程序中输入一个字符串并按下回车键时,用户 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();
}

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

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

编辑:

我猜端口转发已激活

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

【问题讨论】:

  • 这听起来像是网络问题 - 确保您的 isp 没有阻止您,并且您的路由器已正确转发了这些端口。
  • 不是编程问题,这确实是 IT 问题。
  • @DanielA.White 查看我帖子的编辑,它支持帖子转发。正如我所提到的,在我的本地网络中,它工作正常,但在它之外,当我让我的一些朋友尝试它时,客户端无法从他们的网络连接到我的服务器应用程序

标签: c# tcp tcpclient


【解决方案1】:

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

从 OP 编辑​​更新:

因此,您从那里通过公共 ip 和公共端口访问它,并将您的系统设置为侦听 LAN 端口。另一个有效的帮助方法是使用免费的动态 dns 服务,例如我以前使用过的duckdns.com,发现它足够好和容易,以获得一个始终映射到您的公共 IP 地址的实际名称。 - 如果您不是从 ISP 购买静态 IP 地址 - 是动态的,并且会在未来发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多