Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从TCP侦听器网络流中删除空行_C#_Stringbuilder_Tcplistener - Fatal编程技术网

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

C# 从TCP侦听器网络流中删除空行,c#,stringbuilder,tcplistener,C#,Stringbuilder,Tcplistener,我目前正在从NVR CCTV机器中提取XML数据。我使用a来获取数据,因为我不知道字节的大小,所以我将TCP侦听器与a组合在一起,因为一些客户端可能比其他客户端拥有更多的摄像头。每当连接到NVR机器时,我将通过TcpListener接收到的所有数据附加到a,以加快速度并使用更少的资源,因为正如我前面所说,一些客户端的摄像头会比其他客户端多或少,XML数据可能会变得很长。下面是getcpstreamresult IEnumerable,它将数据拉入并返回到类StringBuilder privat

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

我使用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;
}