Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/08/2012, 11:30
gsusalvarado
 
Fecha de Ingreso: noviembre-2011
Ubicación: Cartago
Mensajes: 39
Antigüedad: 12 años, 5 meses
Puntos: 0
Pregunta mensajes privados con socket en c#

hola, veran necesito implementar en un servidor que se maneja con socket lo que se llama mensajes privados utilizando Thread, pero no comprendo bien como va la idea yo tengo un servidor que maneja Thread y al enviar un mensaje desde un cliente se le envia a todos y lo que necesito es que se le envie solamente al usuario que el cliente elija pero no tengo idea de como implementarlo en el servidor veran este es el servidor que me habian dado hace un tiempo gracias

Código:
using System;

using System.Threading;

using System.Net.Sockets;

using System.Text;

using System.Collections;



namespace ConsoleApplication1
{

    class Program
    {

        public static Hashtable clientsList = new Hashtable();



        static void Main(string[] args)
        {

            TcpListener serverSocket = new TcpListener(8888);

            TcpClient clientSocket = default(TcpClient);

            int counter = 0;



            serverSocket.Start();

            Console.WriteLine("Chat Server Started ....");

            counter = 0;

            while ((true))
            {

                counter += 1;

                clientSocket = serverSocket.AcceptTcpClient();



                byte[] bytesFrom = new byte[10025];

                string dataFromClient = null;



                NetworkStream networkStream = clientSocket.GetStream();

                networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);

                dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);

                dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));



                clientsList.Add(dataFromClient, clientSocket);



                broadcast(dataFromClient + " Joined ", dataFromClient, false);



                Console.WriteLine(dataFromClient + " Joined chat room ");

                handleClinet client = new handleClinet();

                client.startClient(clientSocket, dataFromClient, clientsList);
                

            }



            clientSocket.Close();

            serverSocket.Stop();

            Console.WriteLine("exit");

            Console.ReadLine();

        }



        public static void broadcast(string msg, string uName, bool flag)
        {

            foreach (DictionaryEntry Item in clientsList)
            {

                TcpClient broadcastSocket;

                broadcastSocket = (TcpClient)Item.Value;

                NetworkStream broadcastStream = broadcastSocket.GetStream();

                Byte[] broadcastBytes = null;



                if (flag == true)
                {

                    broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg);

                }

                else
                {

                    broadcastBytes = Encoding.ASCII.GetBytes(msg);

                }



                broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length);

                broadcastStream.Flush();

            }

        }  //end broadcast function

    }//end Main class





    public class handleClinet
    {

        TcpClient clientSocket;

        string clNo;

        Hashtable clientsList;



        public void startClient(TcpClient inClientSocket, string clineNo, Hashtable cList)
        {

            this.clientSocket = inClientSocket;

            this.clNo = clineNo;

            this.clientsList = cList;

           Thread ctThread = new Thread(doChat);

            ctThread.Start();

        }



        private void doChat()
        {

            int requestCount = 0;

            byte[] bytesFrom = new byte[10025];

            string dataFromClient = null;

            Byte[] sendBytes = null;

            string serverResponse = null;

            string rCount = null;

            requestCount = 0;



            while ((true))
            {

                try
                {

                    requestCount = requestCount + 1;

                    NetworkStream networkStream = clientSocket.GetStream();

                    networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);

                    dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);

                    dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));

                    Console.WriteLine("From client - " + clNo + " : " + dataFromClient);

                    rCount = Convert.ToString(requestCount);



                    Program.broadcast(dataFromClient, clNo, true);

                }

                catch (Exception ex)
                {

                    Console.WriteLine(ex.ToString());

                }

            }//end while

        }//end doChat

    } //end class handleClinet

}//end namespace