Как читать данные отдельно с NetworkStream? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу создать простую программу чата, используя C# и программирование сокетов.
Проблема в том, что когда я отправляю 3 сообщения на сервер, он не читает их отдельно.
Сначала он читает первое сообщение, а затем читает остальные данные.

Но я хочу прочитать все сообщения отдельно.
Например, когда я отправляю с клиента на сервер hello I'm Bill три раза, мне приходится читать его три раза или печатать на экране отдельно.

Но он читает предложение 2 раза. Как я могу распечатать все сообщения отдельно?

Вот мой клиент Send Метод:

private void bSendMessage_Click(object sender, EventArgs e)
{
    //this method sends to "hello i'm Bill" three times to the server.
    byte[] outStream = System.Text.Encoding.ASCII.GetBytes(rTBoxSendMessage.Text + "$");
    serverStream.Write(outStream, 0, outStream.Length);
    serverStream.Flush();

    serverStream.Write(outStream, 0, outStream.Length);
    serverStream.Flush();

    serverStream.Write(outStream, 0, outStream.Length);
    serverStream.Flush();          
}

А это мой DoChat метод, который читает данные:

private void DoChat()
{
    byte[] bytesFrom = new byte[8192];
    string dataFromClient = null;                              

    while (true)
    {
        try
        {
            NetworkStream networkStream = clientSocket.GetStream();
            networkStream.Read(bytesFrom, 0,(int)clientSocket.ReceiveBufferSize);

            dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);                   
            dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
            //Here is the problem
            //it prints "hello i'm Bill" two times
            //but i was sent three times
            Console.WriteLine(dataFromClient);
            Program.Broadcast(dataFromClient, clNo, true);
        }
        catch (Exception ex)
        {
            //Console.WriteLine("İstemci cikis yapti");
            Console.WriteLine(ex.ToString());
            clientSocket.Close();
            break;
        }
    }
}
...