Именованные конвейеры C# – неправильная кодировка?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Именованные конвейеры C# – неправильная кодировка?

Сообщение Anonymous »


Я впервые работаю с именованными конвейерами. Моя конечная цель — создать один exe-файл, который может работать и как клиент, и как сервер, и как независимый. Сервер может иметь повышенные привилегии.

У меня возникли трудности с подключением туда и обратно. Во-первых, каждая обратная запись клиенту, за исключением первой, начинается с «?». Интернет говорит, что это проблема с кодировкой, но это делает та же функция (writeClient), поэтому я не могу определить, почему в первый раз все будет иначе. (также распечатка подтвердила, что и автор, и читатель каждый раз произносят одну и ту же кодировку). Во-вторых, я хотел убедиться, что закрываю соединения правильно. Это потребовало проб и ошибок.

Считывание данных клиента
В этой версии я попросил его также распечатать кодировку, чтобы убедиться, что она не изменилась.

Подключено.
Установленная версия: 1.2.8
?Последняя версия: 1.2.85
?Требуется обновление
?Запустите еще раз без '-Check', чтобы выполнить автоматическую установку.
?Закрыть
Соединение закрыто.

Основная программа

с использованием системы; использование System.Diagnostics; используя System.Xml.Linq; использование System.Runtime.Versioning; использование System.IO.Pipes; использование System.Text; использование System.Net; использование System.ServiceProcess; использование System.Security.Authentication.ExtendedProtection; [ПоддерживаемаяOSPlatform("Windows")] класс DAQUpdate { static void Main(string[] args) { если (args.Length > 0) { //Проверяем, работает ли та же программа как служба. Если да, используйте это, поскольку оно будет иметь повышенные привилегии. пытаться { используя (NamedPipeClientStream PipeClient = новый NamedPipeClientStream(".", "DAQUpdater", PipeDirection.InOut)) { //Подключаемся к сервису с таймаутом в 1 секунду. Это вернет ошибку по тайм-ауту PipeClient.Connect(1); //Двойная проверка, если подключено по причинам. если (pipeClient.IsConnected) { Console.WriteLine("Подключено."); // Отправляем аргументы на сервер используя (писатель StreamWriter = новый StreamWriter(pipeClient,Encoding.UTF8,-1,true)) { //Упаковывает аргументы с помощью ; разделить, так как я не могу передавать объекты Writer.WriteLine(string.Join(';', args)); писатель.Flush(); } //Читаем все ответы от сервера по мере того, как он их дает. Окончательный ответ будет «Закрыть». строковый ответ = ""; используя (читатель StreamReader = новый StreamReader(pipeClient, Encoding.UTF8)) { while(!response.Contains("Закрыть")) { ответ = читатель.ReadLine(); Console.WriteLine(ответ); } PipeClient.Close(); } Console.WriteLine("Соединение закрыто."); } } } поймать (Исключение ex) { Console.WriteLine(ex.Message); Console.WriteLine("Нет соединения."); } } еще { NamedPipeServer.runServer(); } } общедоступное обновление static void (string[] args) { NamedPipeServer.writeClient("привет"); NamedPipeServer.writeClient(args[0]); NamedPipeServer.writeClient("Тестирование"); NamedPipeServer.writeClient("Закрыть"); } } Функции сервера
// NamedPipeServer.cs использование System.IO.Pipes; использование System.Text; общедоступный класс NamedPipeServer { частный статический NamedPipeServerStream PipeServer; общественная статическая пустота runServer() { пытаться { пока (правда) { //Изменено на глобальное, чтобы другие функции могли вызывать writeClient и отправлять сообщения клиенту из любого места. PipeServer = новый NamedPipeServerStream("DAQUpdater", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous); { Console.WriteLine("Ожидание соединения..."); PipeServer.WaitForConnection(); Console.WriteLine("Клиент подключен."); // Читаем и обрабатываем команду от клиента используя (читатель StreamReader = новый StreamReader(pipeServer, Encoding.UTF8,true,-1,true)) { строковая команда = Reader.ReadLine(); string[] Commandargs = Command.Split(';'); Console.WriteLine($"Получена команда: {commandargs[0]}"); //Запускаем программу проверки обновлений, которая также будет писать клиенту DAQUpdate.update(коммандарги); // Отправляем ответ обратно клиенту, если необходимо используя (писатель StreamWriter = новый StreamWriter(pipeServer, Encoding.UTF8, -1, true)) { Writer.WriteLine("Закрыть"); писатель.Flush(); } } PipeServer.Закрыть(); Console.WriteLine("Соединение закрыто."); } } } поймать (Исключение ex) { Console.WriteLine($"Ошибка: {ex.Message}"); } } public static void writeClient(string messageTxt) { //позволяет другим функциям отправлять клиенту сообщения об обновлении если (pipeServer! = ноль) { если (pipeServer.IsConnected) { используя (писатель StreamWriter = новый StreamWriter(pipeServer, Encoding.UTF8, -1, true)) { Console.WriteLine(писатель.Кодировка); писатель.WriteLine(messageTxt); писатель.Flush(); } } } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Интерпретатор Pycharm – неправильная кодировка
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Конвейеры Vertex AI. Пакетное прогнозирование «Состояние ошибки: 5».
    Anonymous » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Конвейеры Azure DevOps: развертывание проектов Java как зависимостей maven для других проектов.
    Anonymous » » в форуме JAVA
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Конвейеры Azure DevOps: развертывание проектов Java как зависимостей maven для других проектов.
    Anonymous » » в форуме JAVA
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Как исправить пакет не найден (конвейеры рендеринга)?
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»