我的udp聊天停止识别其他用户

时间:2019-02-04 19:07:34

标签: udp chat

我的问题与我正在开发的聊天有关。有时,当我打开本地网络中的某台PC时,它停止与其他PC进行通信(也就是说,消息没有到达其他PC,也没有到达他的另一台PC),此问题通常可以解决重新启动PC的问题,但是到达终点并不愉快。

我分享以下程序:

private UdpClient udpClient;

private UdpClient client;

private IPAddress multiCastAddress;

private IPEndPoint remoteEp;

    private void Listen()
    {
        try
        {
            client = new UdpClient
            {
                ExclusiveAddressUse = false
            };

            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 2222);
            client.Client.SetSocketOption(SocketOptionLevel.Socket,                                             SocketOptionName.ReuseAddress, optionValue: true);
            client.ExclusiveAddressUse = false;
            client.Client.Bind(remoteEP);
            client.JoinMulticastGroup(multiCastAddress);

            while (alive)
            {
                Byte[] data = client.Receive(ref remoteEP);
                string message = Encoding.UTF8.GetString(data);
                cliente.OnMessageRecieved(new MessageEventArgs(message));
            }
        }
        catch (Exception ex) { Crearlog(ex); }
    }

    private void ConnectToChat()
    {
        try
        {
            multiCastAddress = IPAddress.Parse("239.0.0.222");

            udpClient = new UdpClient();

            udpClient.JoinMulticastGroup(multiCastAddress);

            remoteEp = new IPEndPoint(multiCastAddress, 2222);
        }
        catch (Exception ex) { Crearlog(ex); }
    }



    public void Transmit(string typeMessage, string content = "")
    {
        SmallMessage msg = new SmallMessage();          

        msg.Handle = NickName;                          

        msg.typeMessage = typeMessage;                  

        msg.UserSelectedColor = UserSelectedColor;      

        msg.content = content;                          

        if (typeMessage == "RecargarLista")             

            msg.content = Avatarlength.ToString();

        byte[] buffer = Encoding.UTF8.GetBytes(msg.ToJson());   

        udpClient.Send(buffer, buffer.Length, remoteEp);        
    }

0 个答案:

没有答案