Как я могу решить мою проблему получения данных через сокет? - PullRequest
1 голос
/ 21 мая 2019

В настоящее время я модернизирую HMI для этого, я использую платформу UWP, предложенную Microsoft.Старая версия HMI была разработана в C++, но для новых нужд теперь она разработана в C# / XAML.

Я забочусь обо всей коммуникационной части приложения, она постоянно общается с сервером.

Для обработки этого соединения я использую сокет и фоновую задачу для постоянного чтения данных.На уровне соединения нет проблем, приложение хорошо подключается к серверу.К минусам, я не могу прочитать данные, полученные HMI.

Вот часть старого кода (часть восстановления данных): (C++)

int ServerConnexion::server_input (ACE_HANDLE) {

  char data[2048]; 
  int tailleRecue = 0;

  switch (tailleRecue = peer().recv(data, sizeof(data))) {

    case -1:

          console.print("Read Error.");

    case 0:

          console.print("Closed");

    default:

            char *debutMsg = data; 
        int longueurMsg;

        do {
            longueurMsg = decodeMsg(debutMsg);
            debutMsg = debutMsg + longueurMsg; 
        } while (((debutMsg - data)  < tailleRecue) && (longueurMsg != -1));
    }

  return 0;
}

Теперь здесьмой код в новом HMI, эта часть выполняется в фоновом режиме: (C#)

var socket = socketInformation.StreamSocket;
DataReader reader = new DataReader(socket.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
await reader.LoadAsync(250);

var dataString = reader.ReadString(reader.UnconsumedBufferLength);
localSettingsData.Values["data"] = dataString;

Конечно, я сталкиваюсь с проблемой, эта ошибка отображается:

No mapping for the Unicode character exists in the target multi-byte code page

Как я могу решить проблему?

Есть ли функция или метод для чтения и декодирования байтов с помощью сокетов UWP?

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