gpt4 book ai didi

c# - NetworkStream 是否有 .ReadLine() 函数或类似的函数?

转载 作者:可可西里 更新时间:2023-11-01 02:35:54 26 4
gpt4 key购买 nike

我是 TCP 客户端和与主机通信的新手,如果这看起来像一个愚蠢的问题,我很抱歉。

我正在创建一个与设备通信的串行/TCP 应用程序。因为我已经为应用程序的串行部分编写了大部分代码,而 TCP 是我的新任务,所以我正在尽最大努力使其相互兼容。当我与串行设备通信时,我使用 .ReadLine() 检索数据,但是 NetworkStream(我用来从主机检索数据)没有此功能。有没有办法自己实现或者自己写这个功能?

我所要做的就是从字节数组中的 NetworkStream 中检索数据,然后将其转换为 ASCII,但这种方法不适合我...

编辑:

        private void Button_TCP_Connect_Click(object sender, EventArgs e)
{
try
{
Int32 port = Convert.ToInt32(TextBox_TCP_Port.Text);
String server = TextBox_TCP_Server.Text;
var IP = IPAddress.Parse(TextBox_TCP_Host.Text);

TCP = new TcpClient();
TCP.Connect(IP, port);

if (TCP.Connected)
{
TextBox_System_Log.Text = "***CONNECTED***" + Environment.NewLine + "Host: " + IP.ToString()
+ Environment.NewLine + "Port: " + port.ToString() + Environment.NewLine;
tcpConnection = true;


Stream = TCP.GetStream();

Timer_NetworkStream.Enabled = true;
Timer_NetworkStream.Start();

byte[] buffer = new byte[4096];

Stream.BeginRead(buffer, 0, buffer.Length, ReadComplete, buffer);
}
}
catch (SocketException exception)
{
MessageBox.Show(exception.ToString());
}
}
void ReadComplete(IAsyncResult iar)
{

byte[] buffer = (byte[])iar.AsyncState;

int bytesAvailable = Stream.EndRead(iar);

int lastIndex = Array.FindLastIndex(buffer, b => b != 0);
Array.Resize(ref buffer, lastIndex + 1);
SetText(System.Text.Encoding.ASCII.GetString(buffer));

Stream.BeginRead(buffer, 0, buffer.Length, ReadComplete, buffer);
}

我添加了用于创建TCP 客户端NetworkStream 的代码。因为它不是基于事件的,而且我不断地从主机接收数据,所以我使用 .BeginRead() 作为在接收数据时触发的解决方法。 StreamReader 似乎不是一个好的选择,因为它使用循环遍历行,这会卡住我的应用程序的 GUI。将 StreamReader 放在 BackgroundWorker 中不是一个选项,因为我的应用程序已经在使用它。

最佳答案

如果 nws 是你的流,那么

var reader = new StreamReader(nws);
var myString = reader.ReadLine();

做你想做的。

关于c# - NetworkStream 是否有 .ReadLine() 函数或类似的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com