首页 > 解决方案 > 如何使用 NetworkStream 分别读取数据?

问题描述

我想使用 byC#和 socket 编程创建一个简单的聊天程序。
问题是当我向服务器发送 3 条消息时,它没有单独读取它。
首先,它读取第一条消息,然后读取其余数据。

但我想单独阅读所有消息。
例如,当我从客户端向服务器发送hello I'm Bill3 次时,我必须读取 3 次,或者必须单独打印到屏幕上。

但它读了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;
        }
    }
}

标签: c#socketsnetworkingnetworkstream

解决方案


推荐阅读