none
Necesito ayuda (importante para mi) RRS feed

  • Pregunta

  • Hola amigos... llevo desde ya hace un tiempo lidiando con un problema y de ninguna forma lo resuelvo, la cuestion es relacionada al chat que estoy desarrollando, pues en ocaciones al encender determinada PC en mi red local deja de comunicarse con las demas (es decir... no llegan los mensages a las demas pc ni le llegan a esta) este problema suele solucionarse reiniciando el PC pero no es agradable llegar a ese extremo. les comparto la programación y desearía que pudieran ayudarme. De antemano gracias.

     

    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();          //Clase con la estructura del Mensaje

                msg.Handle = NickName;                          //Nombre de usuario

                msg.typeMessage = typeMessage;                  //Tipo de mensaje

                msg.UserSelectedColor = UserSelectedColor;      //Color para el bubble en CSS

                msg.content = content;                          //Contenido del Mensaje

                if (typeMessage == "RecargarLista")             //Si solicito recargar la lista de usuarios

                    msg.content = Avatarlength.ToString();

     

                byte[] buffer = Encoding.UTF8.GetBytes(msg.ToJson());   //Convierto la clase en json

                udpClient.Send(buffer, buffer.Length, remoteEp);        //La envio

            }

    Saludos...

    martes, 29 de enero de 2019 18:44

Todas las respuestas

  • Hola:

    Ver vídeos.

    Programas en C# : Chat - Servidor.

    Programas en C# : Chat - Cliente.

    Saludos.


    http://electronica-pic.blogspot.com

    miércoles, 30 de enero de 2019 5:42
  • Hola Pedro... gracias por la respuesta, la idea es un chat udp sin cliente-servidor, la programación implantada por mi (mostrada en este tema) funciona perfecto pero me da el error de que a veces los usuarios conectados no son reconocidos, es como si el chat se quedara ciego ante la red.

    Saludos, alguna idea


    • Editado Hackerprod viernes, 1 de febrero de 2019 2:02
    viernes, 1 de febrero de 2019 2:01
  • Hola:

    El chat UDP necesita un cliente y un servidor, revisa hasta las configuraciones de tu router.

    Más enlaces.

    https://docs.microsoft.com/es-es/dotnet/framework/network-programming/using-udp-services

    Cliente.

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    public class UDPListener
    {
        private const int listenPort = 11000;
        
        private static void StartListener()
        {
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
            
            try
            {
                while (true)
                {
                    Console.WriteLine("Waiting for broadcast");
                    byte[] bytes = listener.Receive(ref groupEP);
                    
                    Console.WriteLine($"Received broadcast from {groupEP} :");
                    Console.WriteLine($" {Encoding.ASCII.GetString(bytes, 0, bytes.Length)}");
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                listener.Close();
            }
        }
        
        public static void Main()
        {
            StartListener();
        }
    }

    Servidor:

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    class Program
    {
        static void Main(string[] args)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            
            IPAddress broadcast = IPAddress.Parse("192.168.1.255");
            
            byte[] sendbuf = Encoding.ASCII.GetBytes(args[0]);
            IPEndPoint ep = new IPEndPoint(broadcast, 11000);
            
            s.SendTo(sendbuf, ep);
            
            Console.WriteLine("Message sent to the broadcast address");
        }
    }

    Quiers algo de esto.

    https://social.msdn.microsoft.com/Forums/es-ES/493e586f-c3d8-4d97-a06e-8712589b2bee/chat-con-visual-c-por-internet?forum=vcses

    Saludos.


    http://electronica-pic.blogspot.com

    viernes, 1 de febrero de 2019 5:58