C # Чтение данных, отправленных сервером - PullRequest
0 голосов
/ 09 декабря 2018

Я работаю над приложением чата, используя C # в Visual Studio.У меня есть консольный сервер и чат с графическим интерфейсом.Мне удается отправить данные: chatbox -> сервер.А также server -> chatbox, но только для чата, который отправил информацию (когда chatbox отправил информацию, сервер должен отправить ее всем, но это работает только для отправителя).Я хочу, чтобы все приложение получало информацию.На самом деле: Приложение 1 -> Серверный сервер -> Приложение 1, а не Приложение 2 Я не понимаю, почему.Спасибо за вашу помощь в будущем.

        public void start()
    {
        TcpListener l = new TcpListener(new IPAddress(new byte[] { 127, 0, 0, 1 }), port);
        l.Start();

        while(true)
        {
            TcpClient comm = l.AcceptTcpClient();
            Console.WriteLine("Connection established @" + comm);
            new Thread(new Receiver(comm).doOperation).Start();
        }
    }

class Receiver
    {
        private TcpClient comm;

        public Receiver(TcpClient s)
        {
            comm = s;
        }

        public void doOperation()
        {
            Semaphore s = new Semaphore(1, 1);
          while (true)
             {
                s.WaitOne();
                NetworkStream nwStream = comm.GetStream();
                byte[] buffer = new byte[comm.ReceiveBufferSize];

                //---read incoming stream---
                int bytesRead = nwStream.Read(buffer, 0, comm.ReceiveBufferSize);

                //---convert the data received into a string---
                string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                Console.WriteLine("Received " + dataReceived);

                s.Release();
                s.WaitOne();

                Console.WriteLine("Send to all : " + dataReceived);
                nwStream.Write(buffer, 0, bytesRead);
                s.Release();


            }

        }
    }

И я получаю информацию в чате:

public Form1(string h, int p)
    {
       ...

        comm = new TcpClient(h, p);
        nwStream = comm.GetStream();


        Thread th1 = new Thread(receive);
        th1.Start();



    }

    public void receive()
    {
        while (true)
        {
            byte[] bytesToRead = new byte[comm.ReceiveBufferSize];
            int bytesRead = nwStream.Read(bytesToRead, 0, comm.ReceiveBufferSize);
            MessageBox.Show("Appli info received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));

        }
    }

1 Ответ

0 голосов
/ 09 декабря 2018

Какой протокол вы используете между [sever <-> client]?

Вам необходимо реализовать протокол WebSocket с обеих сторон.Сервер сможет отправлять события клиентам.

После вопроса о распознавании протоколов вам просто нужно создать / вызвать события на стороне C # и получить Javascript.

...