C # Создание чатов с несколькими клиент-серверными сокетами

1

Добрый день, я пытался создать систему вроде skype с точки зрения групп convo, вступать в группу и общаться с другими пользователями, которые были в сети только внутри этой группы, проблема заключается в том, что я не знаю, как я мог бы разделить этот чат комнаты в несколько и сделать их независимыми друг от друга только с одним сервером

В целом, я пытаюсь использовать несколько чатов с одним сервером, сохраняя один журнал чатов в чате и умея его читать

Текущий код у меня работает только как 1 общая чат-серверная сторона сервера:

static void Main(string[] args)
    {
        Socket newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Ip);
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 6000);
        newSocket.Bind(endPoint);
        newSocket.Listen(10);
        Console.Write("Waiting...\n");
        while (true)
        {

            Socket auxSocket = newSocket.Accept();
            ThreadLab a = new ThreadLab(auxSocket);
            Thread novaThread = new Thread(new ThreadStart(a.Connect));
            novaThread.Start();

        }
    }

Класс ThreadLab:

private Socket socket;
        static int nmrUsers = 0;
        static int indice;
        static Socket[] listaSockets = new Socket[10];
        static ArrayList listaUtilizadores = new ArrayList();

        public ThreadLab(Socket s)
        {
            socket = s;
            listaSockets[indice++] = s;
        }

        public void Connect()
        {
            IPEndPoint aux = (IPEndPoint)socket.RemoteEndPoint;
            Console.Write("Client " + aux.Address.ToString() + " connected\n");
        }

И клиентская сторона, которая будет иметь читателя и писателя:

private static Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Ip);
        private static ThreadStart tSReader;
        private static ThreadStart tSWriter;
        private static Thread tReader;
        private static Thread tWriter;
        private static string nome;
        static void Main(string[] args)
        {

            IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6000);
            tSReader = new ThreadStart(reader);
            tSWriter = new ThreadStart(writer);
            tReader = new Thread(tSReader);
            tWriter = new Thread(tSWriter);

            try
            {
                client.Connect(clientEndPoint);
            }
            catch (SocketException e)
            {
                Console.WriteLine(e.ToString());
                Console.ReadLine();
                return;
            }
            tReader.Start();
            tWriter.Start();
        }
        public static void writer()
        {
            string str;

            byte[] data = new byte[1024];

            nome = Console.ReadLine();
            data = Encoding.ASCII.GetBytes(nome);
            client.Send(data, data.Length, SocketFlags.None);

            do
            {
                str = Console.ReadLine();
                data = Encoding.ASCII.GetBytes(str);
                client.Send(data, data.Length, SocketFlags.None);

            } while (str != "exit");

            client.Shutdown(SocketShutdown.Both);
            tReader.Abort();
            client.Close();
        }

        public static void reader()
        {
            byte[] data = new byte[1024];
            int recv;
            while (true)
            {
                try
                {
                    recv = client.Receive(data);
                }
                catch (Exception e)
                {
                    Console.WriteLine("Erro: " + e.Message);
                    Console.ReadLine();
                    break;
                }

                Console.WriteLine("\n" + Encoding.ASCII.GetString(data, 0, recv));

            }
        }
    }

У меня были некоторые проблемы с поиском решений для моей проблемы, но безрезультатно, было бы действительно благодарно, если бы кто-то мог помочь мне с этой проблемой:\

Теги:
sockets
chatroom
client-server

1 ответ

0

На стороне сервера вы должны иметь поток в чате. Внутри этого потока вы должны иметь поток для подключения к клиентам, которые находятся в этом чате. Чат-чат должен быть потокобезопасным, так как коллекция клиентов касается... Если вы не знакомы с синхронизацией параллельных потоков, вы можете использовать поточно-безопасные коллекции в С#: http://msdn.microsoft.com/en-us/library/dd997305(v=vs.110).aspx ", не беспокоясь о синхронизации" [много] ".

Читайте о MVC (https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) Это очень поможет вам с дизайном серверной части.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню