C# 从TCP侦听器网络流中删除空行
我目前正在从NVR CCTV机器中提取XML数据。C# 从TCP侦听器网络流中删除空行,c#,stringbuilder,tcplistener,C#,Stringbuilder,Tcplistener,我目前正在从NVR CCTV机器中提取XML数据。我使用a来获取数据,因为我不知道字节的大小,所以我将TCP侦听器与a组合在一起,因为一些客户端可能比其他客户端拥有更多的摄像头。每当连接到NVR机器时,我将通过TcpListener接收到的所有数据附加到a,以加快速度并使用更少的资源,因为正如我前面所说,一些客户端的摄像头会比其他客户端多或少,XML数据可能会变得很长。下面是getcpstreamresult IEnumerable,它将数据拉入并返回到类StringBuilder privat
我使用a来获取数据,因为我不知道字节的大小,所以我将
TCP侦听器
与a组合在一起,因为一些客户端可能比其他客户端拥有更多的摄像头。每当连接到NVR机器时,我将通过
TcpListener
接收到的所有数据附加到a,以加快速度并使用更少的资源,因为正如我前面所说,一些客户端的摄像头会比其他客户端多或少,XML数据可能会变得很长。下面是
getcpstreamresult IEnumerable
,它将数据拉入并返回到类StringBuilder
private IEnumerable<string> GetTcpStreamResults
{
get
{
Byte[] bytes;
this.TcpListener.Start();
Console.WriteLine("Listening");
TcpClient client = TcpListener.AcceptTcpClient();
Console.WriteLine("Connection Made");
while (true)
{
using (NetworkStream ns = client.GetStream())
{
if (client.ReceiveBufferSize > 0)
{
bytes = new byte[client.ReceiveBufferSize];
ns.Read(bytes, 0, client.ReceiveBufferSize);
yield return String.Format(Encoding.ASCII.GetString(bytes));
}
break;
}
}
}
}
这里是我如何调用我创建的TCPListener
类的main
静态空白
class Program
{
static void Main()
{
TCPListener TcpListener = new TCPListener(port:23);
Task task = Task.Run(async () =>
{
while (true)
{
await TcpListener.StartListeningAsync();
Console.WriteLine(TcpListener.Xml.ToString());
TcpListener.Xml.Clear();
}
});
Console.ReadLine();
}
}
下面是Stringbuilder
string结果(我不得不删除一些XML数据,因为它太长了,无法发布这是20个摄像头的数据之一
倾听
而且
但是它仍然得到相同的结果。不要在字符串生成器中使用writeline。@BugFinder,注意到,但是不幸的是,
while(true)仍然得到相同的结果
看起来它可能会被错过。正文有一个可选的屈服,并且在第一轮中总是中断
。是的,出于这样或那样的原因,如果中断
不存在,则不会返回任何内容。因此我认为只有当客户端.ReceiveBufferSize
等于0时才会返回。通常情况下,您对未读取的字节执行操作缓冲区大小…所以当((i=ns.Read(bytes,0,bytes.Length))!=0)时,如果没有读取任何数据,则不会发生任何事情。。
class Program
{
static void Main()
{
TCPListener TcpListener = new TCPListener(port:23);
Task task = Task.Run(async () =>
{
while (true)
{
await TcpListener.StartListeningAsync();
Console.WriteLine(TcpListener.Xml.ToString());
TcpListener.Xml.Clear();
}
});
Console.ReadLine();
}
}
<3 ConnectState="Connected" ConnectState="Loss" Sub="Loss" RW="---------"
Redundancy="---------">
<Alarm Type="Local alarm" Times="0" CurAlarmState="Normal"></Alarm>
<Alarm Type="Network alarm" Times="0" CurAlarmState="Normal"></Alarm>
<Alarm Type="Motion detection" Times="0" CurAlarmState="Normal"></Alarm>
<Alarm Type="Video loss" Times="0" CurAlarmState="Normal"></Alarm>
<Alarm Type="Camera masking" Times="0" CurAlarmState="Normal"></Alarm>
<Alarm Type="Cross detect" Times="0" CurAlarmState="Normal"></Alarm>
<Alarm Type="Intrusion detect" Times="0" CurAlarmState="Normal"></Alarm>
</3>
static void Main()
{
TCPListener TcpListener = new TCPListener(port:23);
Task task = Task.Run(async () =>
{
while (true)
{
await TcpListener.StartListeningAsync();
string resultString = Regex.Replace(TcpListener.Xml.ToString(), @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
Console.WriteLine(resultString);
TcpListener.Xml.Clear();
}
});
Console.ReadLine();
}
using (NetworkStream ns = client.GetStream())
{
if (client.ReceiveBufferSize > 0)
{
bytes = new byte[client.ReceiveBufferSize];
ns.Read(bytes, 0, client.ReceiveBufferSize);
if (!String.IsNullOrWhiteSpace(Encoding.ASCII.GetString(bytes)))
{
yield return String.Format(Encoding.ASCII.GetString(bytes));
}
}
break;
}