从TCP侦听器网络流中删除空行

时间:2018-06-18 09:50:11

标签: c# stringbuilder tcplistener

我正在从NVR CCTV机器中提取XML数据。

我使用TCP Listener来获取数据,因为我不知道我合并的字节大小TCP Listener TcpListener Network Stream,因为某些客户可能拥有比其他客户更多的摄像头。

每当与NVR机器建立连接时,我会通过{追加它收到的所有数据{1}}到StringBuilder以加快速度并减少使用资源,因为正如我之前所说的,一些客户将拥有比其他客户更多或更少的相机,并且XML数据可能变得非常长。
/>这是GetTcpStreamResult IEnumerable<String>,它正在提取数据并将其返回到类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并给出命令后,它将开始监听。

public async Task<bool> StartListeningAsync()
{
    foreach (string value in GetTcpStreamResults)
    {
        this.Xml.AppendLine(value);
    }
    return await Task.FromResult(true);
}

以下是main静态无效我如何调用我创建的TCPListener类。

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字符串结果(我必须删除一些XML数据,因为它太长而无法发布

这是20个相机数据中的一个
Listening

<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>












Listening {
{1}}

如何删除(Code Above Will Repeat As The NVR machine sends out its data every 60 seconds)数据底部的空白行,这样我在数据提取之间就不会有太大的差距,因为一旦数据全部有序,

我会转换字符串为XML Document,然后为XmlAttribute,因此我可以创建另一个类

我试过以下但没有成功。

Stringbuilder


还有

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();
}

但它的结果仍然相同。

0 个答案:

没有答案