Как я могу читать и анализировать XML из потока TCP? - PullRequest
0 голосов
/ 30 мая 2018

Спасибо, что нашли время посмотреть на мой вопрос!Это мой первый пост, поэтому, пожалуйста, извините, если я сделал что-то не так на форуме:)

РЕДАКТИРОВАТЬ : Кажется, я решил свою проблему.Я просто читаю строку TCP-потока по одной за раз, и оттуда я использую операторы if, чтобы определить точки начала и окончания чтения.

Обновленный код:

using System;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
using System.Text;

namespace RFLY_CMD
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting...");
            TcpListener server = new TcpListener(IPAddress.Parse("0.0.0.0"), 7362);
            server.Start();
            Console.WriteLine("Listening...");
            Console.WriteLine();
            while (true)
            {
                ClientWorking cw = new ClientWorking(server.AcceptTcpClient());
                new Thread(new ThreadStart(cw.DoSomethingWithClient)).Start();
            }
        }
    }

    class ClientWorking
    {
        private Stream ClientStream;
        private TcpClient Client;

        public ClientWorking(TcpClient Client)
        {
            this.Client = Client;
            ClientStream = Client.GetStream();
        }

        public void DoSomethingWithClient()
        {
            StreamWriter sw = new StreamWriter(ClientStream);
            StreamReader sr = new StreamReader(sw.BaseStream);
            string data;
            bool cap = false;
            string full_string = null;
            try
            {
                while (true)
                {
                    data = sr.ReadLine();
                    if (!string.IsNullOrEmpty(data) && !string.IsNullOrWhiteSpace(data) || cap)
                    {
                        if(data == "... start")
                        {
                            cap = true;
                            Console.WriteLine("---START FOUND!!!---");
                        }

                        if (cap)
                        {
                            Console.WriteLine(data);
                            full_string += data + "--:BREAK:--";
                        }

                        if (data == "... end")
                        {
                            cap = false;

                            Console.WriteLine("---END FOUND!!!---");
                            Console.WriteLine();
                            Console.WriteLine("-------------FULL STRING-------------");
                            Console.WriteLine(full_string);
                        }
                    }
                }
            }
            finally
            {
                Console.Write("Ending...");
                sw.Close();
            }
        }
    }
}

РабочаяСнимок экрана
Завершить редактирование.

Хорошо, вот в чем проблема ... У меня есть приложение, отправляющее XML примерно так:

Снимок экрана XML

Но мне нужна только строка текста в красном поле, показанном здесь:

Целевые данные

Этоя впервые имею дело с XML, и у меня есть небольшой опыт работы с TCP.Кроме этого, я в пути над головой.Заранее спасибо!

Вот мой код:

using System;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
using System.Text;
using System.Xml;

namespace RFLY_CMD
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting...");
            TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 7362);
            server.Start();
            Console.WriteLine("Started.");
            while (true)
            {
                ClientWorking cw = new ClientWorking(server.AcceptTcpClient());
                new Thread(new ThreadStart(cw.DoSomethingWithClient)).Start();
            }
        }
    }

class ClientWorking
{
    private Stream ClientStream;
    private TcpClient Client;

    public ClientWorking(TcpClient Client)
    {
        this.Client = Client;
        ClientStream = Client.GetStream();
    }

    public void DoSomethingWithClient()
    {
        StreamWriter sw = new StreamWriter(ClientStream);
        StreamReader sr = new StreamReader(sw.BaseStream);
        string data;
        try
        {
            while (true)
            {
                data = sr.ReadToEnd();
                if (!string.IsNullOrEmpty(data) && !string.IsNullOrWhiteSpace(data))
                {
                    //Console.Clear();
                    Console.WriteLine(data);
                    //Console.WriteLine("---------------");
                }
                sr.DiscardBufferedData();
            }
        }
        finally
        {
            Console.Write("Ending...");
            sw.Close();
        }
    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...