c# - 如何使用 NetworkStream 分别读取数据?
问题描述
我想使用 byC#
和 socket 编程创建一个简单的聊天程序。
问题是当我向服务器发送 3 条消息时,它没有单独读取它。
首先,它读取第一条消息,然后读取其余数据。
但我想单独阅读所有消息。
例如,当我从客户端向服务器发送hello I'm Bill
3 次时,我必须读取 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;
}
}
}
解决方案
推荐阅读
- r - 安装 R 包 TM 时的非零退出状态
- rspec - RSpec:来自 ActiveRecord::Base.connection 的测试结果
- javascript - 网页宽度超过 100%
- r - 如何从向量中对特定的“月份”进行分组并将它们分类为 R 中的选定季节?
- arduino - 使用 avr lib 时,Arduino 无法识别外部 EEPROM
- c++ - 用向量初始化向量?
- ios - 强制 Alamofire 在主线程上做所有事情?
- c# - 计算对象列表中 2 个属性的出现次数 c#
- python - 如何在防火墙后面设置 spacy
- javascript - 项目获取不是函数vue js