예제 #1
0
        public void EnviarDatos(IPEndPoint id, string datos)
        {
            //Guarda Mensaje que envia servidor
            GuardarMensaje(Convert.ToString(DateTime.Now), nombre, datos);

            InfoCte cte = (InfoCte)clientes[id];

            cte.socket.Send(Encoding.ASCII.GetBytes(datos));
        }
예제 #2
0
        private void LeerSocket()
        {
            IPEndPoint id = this.cteAct;

            byte[] buffer;

            InfoCte cte = (InfoCte)clientes[id];
            int     ret = 0;

            while (true)
            {
                if (cte.socket.Connected)
                {
                    buffer = new byte[128];
                    try
                    {
                        ret = cte.socket.Receive(buffer, buffer.Length,
                                                 SocketFlags.None);
                        if (ret > 0)
                        {
                            cte.lastMsg = Encoding.ASCII.GetString(buffer);
                            //Guarda mensaje que recive
                            GuardarMensaje(Convert.ToString(DateTime.Now), cte.nick, cte.lastMsg);
                            clientes[id] = cte;
                            //Cada vez que lleguen datos. dispara este evento y dime de quien fue
                            //this.DatosRecibidos(id, cte.nick);
                            this.DatosRecibidos(id);
                        }
                        else
                        {
                            //si no, dispara este evento
                            this.ConexionTerminada(id);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        if (!cte.socket.Connected)
                        {
                            //si ya no está conectado este socket, dispara este evento y dime de quien fue
                            this.ConexionTerminada(id);
                            break;
                        }
                    }
                }
            }

            CerrarThread(id);
        }
예제 #3
0
        private void CerrarThread(IPEndPoint id)
        {
            InfoCte cte = (InfoCte)clientes[id];

            try
            {
                cte.thread.Abort();
            }
            catch (Exception ex)
            {
                lock (this)
                {
                    clientes.Remove(id);
                }
            }
        }
예제 #4
0
        private void LeerSocket()
        {
            IPEndPoint id = this.cteAct;

            byte[] buffer;
            //la direccion ip será el id y verificamos si esta conectado, si lo está recuperamos lo que tiene
            InfoCte cte = (InfoCte)clientes[id];
            int     ret = 0;

            while (true)
            {
                if (cte.socket.Connected)
                {
                    buffer = new byte[128];
                    try
                    {
                        ret = cte.socket.Receive(buffer, buffer.Length, SocketFlags.None);
                        if (ret > 0)//si tenemos datos
                        {
                            cte.lastMsg  = Encoding.ASCII.GetString(buffer);
                            clientes[id] = cte;
                            //lazamos evento
                            this.DatosRecibidos(id);
                        }
                        else
                        {
                            //si no me envia nada, mato el proceso
                            this.ConexionTerminada(id);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        //metemos la siguiente validacion pero comprobamos si está conectado
                        if (!cte.socket.Connected)
                        {
                            this.ConexionTerminada(id);
                            break;
                        }
                    }
                }
            }

            CerrarThread(id);
        }
예제 #5
0
        private void EsperarCliente()
        {
            //throw new NotImplementedException();
            InfoCte cte = new InfoCte();

            while (true)
            {
                cte.socket  = tcpLsn.AcceptSocket();
                this.cteAct = (IPEndPoint)cte.socket.RemoteEndPoint;
                cte.thread  = new Thread(new ThreadStart(LeerSocket));


                lock (this)
                {
                    clientes.Add(cteAct, cte);
                }
                //Lanzamos un evento
                this.NuevaConexion(cteAct);
                cte.thread.Start();
            }
        }
예제 #6
0
        private void EsperarCliente()
        {
            InfoCte cte = new InfoCte();

            while (true)
            {
                cte.socket = tcpLsn.AcceptSocket();
                byte[] buffer = new byte[30];
                //Recibimos el primer mensaje personalmente para guardarlo como nick
                int ret = cte.socket.Receive(buffer, SocketFlags.None);
                cte.nick    = Encoding.ASCII.GetString(buffer);
                nombre_c    = cte.nick;
                this.cteAct = (IPEndPoint)cte.socket.RemoteEndPoint;
                cte.thread  = new Thread(new ThreadStart(LeerSocket));
                lock (this)
                {
                    clientes.Add(cteAct, cte);
                }
                //cada vez que alguien se conecte, dispara este evento y dale estos datos
                this.NuevaConexion(cteAct);
                //this.NuevaConexion(cteAct);
                cte.thread.Start();
            }
        }
예제 #7
0
        public void EnviarDatos(IPEndPoint id, string msg)
        {
            InfoCte cte = (InfoCte)clientes[id];

            cte.socket.Send(Encoding.ASCII.GetBytes(msg));
        }
예제 #8
0
        public String ObtenerDatos(IPEndPoint id)
        {
            InfoCte cte = (InfoCte)clientes[id];

            return(cte.lastMsg);
        }
예제 #9
0
        public void Cerrar(IPEndPoint id)
        {
            InfoCte cte = (InfoCte)clientes[id];

            cte.socket.Close();
        }
예제 #10
0
        public string ObtenerNick(IPEndPoint id)
        {
            InfoCte cte = (InfoCte)clientes[id];

            return(cte.nick);
        }