Я ломаю голову над ошибкой в этой системе, которую я строю. В принципе, я использую сокеты для связи между двумя приложениями C#. Вернее, сервер сценариев Unity C# и клиентское приложение C#.Socket получает правильные байты, байт переводится в пустую строку
С ручными испытаниями система работает отлично, никаких аномалий вообще. Чтобы проверить работоспособность и многопользовательскую функциональность, я написал класс тестера, который запускает несколько потоков (клиентов) и имеет количество сообщений об угрозе X на сервере. Вот где моя проблема возникает ... Иногда.
Когда Socket отправляет или получает, он возвращает целочисленный контейнер количество байтов, которое было отправлено/получено. Когда проблема возникает, я вижу, что на сервер поступило правильное количество байтов. Тем не менее, после ввода байтов в строку, я неожиданно покинул пустую строку, вместо сообщения, которое я обычно вижу здесь.
Я в недоумении от того, что вызывает эту проблему. Я использую Encoding.Default.GetString() для перевода байтов в строку.
Любая помощь приветствуется! Дэвид
public void ReceiveFromClient (Socket handlerSocket)
{
serverBuffer = new byte[iBufferSize]; //iBufferSize = 8192;
int i = handlerSocket.Receive (serverBuffer);
Debug.Log ("Bytes received: " + i);
string message = Encoding.UTF8.GetString (serverBuffer, 0, i);
Debug.Log ("Message received: " + message);
//Do stuff with the message
}
bool SendMessageToUnity(string input)
{//returns a bool saying whether the message was sent or not
if (clientSocket != null)
{
if (clientSocket.Connected)
{
byte[] bytes = Encoding.UTF8.GetBytes(input+"|");
txtOutput.BeginInvoke(new Action(() => txtOutput.AppendText("Sending message: " + Encoding.UTF8.GetString(bytes) + Environment.NewLine)));
int i = clientSocket.Send(bytes);
txtOutput.BeginInvoke(new Action(() => txtOutput.AppendText("Sending "+i+" bytes. "+ Environment.NewLine)));
return true;
}
}
return false;
}
Вы должны использовать 'Encoding.UTF8', а не' Encoding.Default'. 'Encoding.Default' может быть разным между разными компьютерами. – xanatos
Опубликуйте свой код .. – I4V