В настоящее время я модернизирую 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?