Обмен сообщениями между потоками

114
17 мая 2021, 02:40

у меня есть сервер, который создает отдельный поток для каждого клиента

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections.Generic;
namespace Test
{
    class Server
    {
        static void Main(string[] args)
        {
            IPHostEntry ipHost = Dns.GetHostEntry("192.168.1.52");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11111);
            Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            int maxClients = 10;
            try
            {
                sListener.Bind(ipEndPoint);
                sListener.Listen(maxClients);
                Console.WriteLine("[Info] Ожидаем соединение через порт {0}", ipEndPoint);
                while (true)
                {
                    Socket handler = sListener.Accept();
                    IPAddress client_ip = ((IPEndPoint)handler.RemoteEndPoint).Address;
                    ClientObject clientObject = new ClientObject(handler);
                    // создаем новый поток для обслуживания нового клиента
                    Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                    clientThread.Start();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }
    }
}

Как можно называть каждый поток при создании своим именем (например образно Sasha, Masha, Dasha) и из потока Sasha в поток Masha передать данные через сокет? Вот сам поток

using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Squirrels
{
    public class ClientObject
    {
        public Socket handler;
        public ClientObject(Socket socket)
        {
            handler = socket;
        }
        public void Process()
        {
            try
            {
                byte[] bytes;
                int bytesRec;
                while (true)
                {
                    bytes = new byte[1024];
                    bytesRec = handler.Receive(bytes);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }

    }
}
READ ALSO
Переключения текста в Label

Переключения текста в Label

Подскажите как сделать такого плана переключение текста?

107
Как обновить данные в базе данных

Как обновить данные в базе данных

Я работаю над WPF приложением, в нём есть DataGrid и он связан с базой данныхУ меня есть методы для добавления и удаления данных из Базы и DataGrid

88
Как создать загрузочный экран перед показом формы?

Как создать загрузочный экран перед показом формы?

У меня есть форма ( ScreenSplashcs ) которая показывает при запуске текст и проверяет некое bool значение

132
Можно ли использовать только primary key в MySQL таблице?

Можно ли использовать только primary key в MySQL таблице?

Дана MySQL БД для хранения анкет и результатов их заполнения

232