Member 12885549 Ответов: 0

Продолжать работать по TCP слушателя .Объем основного приложения консоли


Я создаю приложение, которое должно ждать TCP - сообщений, а когда они есть- создавать текстовый файл с этими данными сообщения. Для этого я и создавал .Объем основного консольного приложения. Однако я наткнулся на проблему, что после написания сообщения/получения исключения приложение закрывается. Как мне заставить его работать и слушать другие сообщения, которые могут прийти? Или я выбрал не тот тип проекта для этого?

вот мой код:

Что я уже пробовал:

class Program
{
    static void Main(string[] args)
    {
        TcpListener server = null;
        try
        {
            var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
            var ipAddress = IPAddress.Parse("xx.x.xx.x");

            server = new TcpListener(ipAddress, Port);

            // Start listening for client requests.
            server.Start();
            Console.WriteLine("server started");
            // Buffer for reading data
            byte[] bytes = new Byte[1024];
            string data = null;

            // Enter the listening loop.
            while (true)
            {
                // Perform a blocking call to accept requests.
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected!");

                data = null;

                // Get a stream object for reading and writing
                NetworkStream stream = client.GetStream();

                int i;

                // Loop to receive all the data sent by the client.
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    // Translate data bytes to a ASCII string.
                    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                    string pathString = "";

                    if (data.Contains(XXX))
                    {
                        pathString = Path.Combine(folderName, "XXX");
                    }
                    else if (data.Contains(AAA))
                    {
                        pathString = Path.Combine(folderName, "AAA");
                    }
                    else if (data.Contains(BBB))
                    {
                        pathString = Path.Combine(folderName, "BBB");
                    }
                    else
                    {
                        pathString = Path.Combine(folderName, "Unrouteable");
                    }

                    if (!Directory.Exists(pathString))
                    {
                        Directory.CreateDirectory(pathString);
                    }

                    CreateTextFile(pathString, "fsdfsdf.txt", data);
                }

                // Shutdown and end connection
                client.Close();
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine("SocketException: {0}", e);
        }
        finally
        {
            // Stop listening for new clients.
            server.Stop();
        }
         Console.ReadLine();
    }

    private static void CreateTextFile(string path, string textTitle, string data)
    {
        var pathString = Path.Combine(path, textTitle);
        if (!File.Exists(pathString))
        {
            File.Create(pathString).Close();
            using (var tw = new StreamWriter(pathString))
            {
                tw.WriteLine(data);
            }
        }
    }
}

F-ES Sitecore

Возможно, в сообщении об исключении есть ключ к разгадке.

Luc Pattyn

File.Create(pathString).Close();


Это довольно оригинально. Не знаю, каковы ваши намерения, но я уверен, что есть лучший способ добраться туда.

Richard MacCutchan

Блоки try/catch/finally должны находиться внутри цикла while. А не наоборот как у вас с этим.

Jin Vincent Necesario

основываясь на ваших кодах вот некоторые предложения которые я могу дать
1. Прежде чем проверить данные, вы можете проверить, являются ли они нулевыми или пустыми, например !string.IsNullOrEmpty(данные)
2. перед вызовом метода CreateTextFile убедитесь, что строка пути существует, и проверьте, является ли она нулевой или пустой.
3. или, может быть, вам нужно какое-то повышенное разрешение на файлы/папки, которыми вы манипулируете.

0 Ответов