【问题标题】:C# Chat app only working on LANC# 聊天应用程序仅在 LAN 上工作
【发布时间】:2015-01-25 15:26:03
【问题描述】:

我使用 UDP 协议在 C# 中制作了一个聊天应用程序。我不想使用 TCP。但它只适用于我自己的网络/wifi。我为自己和我的朋友,或者可能其他任何下载它的人制作了这个,但它不起作用。我必须转发还是什么?移植没有意义,因为我下载的所有其他程序都不会要求我移植 :P 。我怎样才能让它长距离工作?这是我使用的代码:

接收数据:

    static UdpClient UdpReciever = new UdpClient(PORT);
    static byte[] data = new byte[512];

    static void Main(string[] args)
    {
        while (true)
        {
            IPEndPoint EP = new IPEndPoint(IPAddress.Any, PORT);
            data = UdpReciever.Receive(ref EP);
            Otherclass oc = new Parser();
            Otherclass.Parse(data);

        }
    }

    public class Otherclass
    {
        public static void Parse(Byte[] data)
        {
            string received = Encoding.ASCII.GetString(data);
            Console.WriteLine(received);
        }
    }

为了发送我正在使用此代码的数据:

            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(this.Ip), port);
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            client.SendTo(ex.packetdata, ep);

【问题讨论】:

    标签: c# udp chat udpclient


    【解决方案1】:

    您不能将数据发送到互联网上的任何计算机。您的客户需要有一个公共 ip 和您用于将其转发到他们的计算机的端口。如果他们没有公共 IP,那么您需要一个服务器来处理消息。

    【讨论】:

    • 他们有一个公共 IP。但这没有意义,如果我不移植,PC上的战场之类的游戏如何工作?战地仍然接收数据。
    • 所有在线游戏和聊天程序都使用服务器。
    • LukASS741,你能解释一下它是如何工作的吗?一般来说,我是网络新手。
    • 例如,如果您在游戏中移动,则有关您的移动的信息将发送到服务器。其他玩家从服务器下载该信息,他们的游戏对其进行处理并让您在他们的屏幕上移动。绝对比将此类信息发送给在线的 10 名玩家中的每一个更好的解决方案。如果您打算只与另外 1 个人使用此聊天,并且你们俩都有公共 ip,那么点对点解决方案可能是合适的。如果这不起作用,请打开它在路由器上使用的端口并将其转发到您的计算机。
    • 好的,那么我如何在没有端口转发的情况下让它工作。如何对其进行编码以便其他客户端可以从服务器下载信息?我不确定我会使用什么代码来实现这一点。我是新手,在此先感谢LukAss741。 :)
    【解决方案2】:

    有两点需要注意:

    1. 您创建的 EP 端点具有您的本地网络的 IP 地址,该地址无法从外部世界访问。打印出来验证。

    2. UDP 数据包的接收方式不一定与发送方式相同。在本地网络上,您可能不会发现差异,但在更大的网络上进行一些测试会。仔细查看 UDP 协议提供的保证。如果您尝试纠正错误,您很快就会重新发明 TCP,因此您不妨一开始就使用 TCP。

    【讨论】:

    • 谢谢,我知道 UDP 的缺点。但是我如何才能在本地网络之外获取端点?
    • 你必须有一个固定的IP地址才能让别人找到你的服务器。在您的路由器上将特定端口上的流量转发到您的机器。
    猜你喜欢
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2011-01-25
    • 2011-01-31
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多