Как сделать потоковый прием сообщений TCPClient?

157
18 июля 2019, 22:10

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

Заранее спасибо Вот код Client_Chat.cs

using System;
using System.Text;
using System.Net.Sockets;
using System.Threading;

class Program
{
    private const int port = 9001;
    private const string server = "127.0.0.1";
    private const int byteLimit = 2048;
    static void Main(string[] args)
    {
        try
        {
            TcpClient client = new TcpClient();
            client.Connect(server, port);
            byte[] data = new byte[byteLimit];
            string response;
            NetworkStream stream = client.GetStream();
            do
            {
                int bytes = stream.Read(data, 0, data.Length);
                response = Encoding.UTF8.GetString(data, 0, bytes);
            }
            while (stream.DataAvailable); // пока данные есть в потоке
            Console.WriteLine(response);
        }
        catch
        {
        }
    }
}

Chat_Server.cs

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace TcpListenerApp
{
    class Program
    {
        const int port = 9001; // порт для прослушивания подключений
        static void Main(string[] args)
        {
            int connectedClients = 0;
            TcpListener server = null;
            try
            {
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");
                server = new TcpListener(localAddr, port);
                List<TcpClient> clients = new List<TcpClient>();
                List<NetworkStream> streams = new List<NetworkStream>();
                // запуск слушателя
                server.Start();
                while (true)
                {
                    Console.WriteLine("Ожидание подключений... ");
                    // получаем входящее подключение
                    TcpClient client = server.AcceptTcpClient();
                    clients.Add(client);
                    connectedClients++;
                    Console.WriteLine("Подключен клиент. Выполнение запроса...");
                    Console.WriteLine(clients);
                    // получаем сетевой поток для чтения и записи
                    NetworkStream stream = client.GetStream();
                    streams.Add(stream);
                    // сообщение для отправки клиенту
                    string response = "Привет мир";
                    // преобразуем сообщение в массив байтов
                    byte[] data = Encoding.UTF8.GetBytes(response);
                    // отправка сообщения
                    stream.Write(data, 0, data.Length);
                    Console.WriteLine("Отправлено сообщение: {0}", response);
                    // закрываем поток
                    stream.Close();
                    // закрываем подключение
                    client.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (server != null)
                    server.Stop();
            }
        }
    }
}
READ ALSO
Кастомный Identity не обращается к /Identity/Account/Login

Кастомный Identity не обращается к /Identity/Account/Login

Я пробовал разные варианты кастомного identity, даже мелкие отступления в сторону от типового решения (допустим, решил поменять тип поля для...

142
Скорость работы алгоритма на C#

Скорость работы алгоритма на C#

Есть такая задачка простенькаяПодсчитать количество повторений строковых элементов в неотсортированных коллекциях

133
Как правильно считать время

Как правильно считать время

Есть статический класс (мой) в котором я в начале игры достаю из сервера время, как мне потом к нему прибавлять время пройденное в игре что...

143
Запрет на повторный вывод данных в Report viewer

Запрет на повторный вывод данных в Report viewer

Мне необходимо убрать дублирование шапки страницы как на скринахНа первом скрине это макет того как отчет должен выглядеть

159