Продолжать работать по 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. или, может быть, вам нужно какое-то повышенное разрешение на файлы/папки, которыми вы манипулируете.