У меня есть следующий метод, который отправляет команду rcon игровому серверу.C# udp socket не получает целое сообщение
public string sendCommand(string command)
{
byte[] bufferTemp = Encoding.ASCII.GetBytes(command);
byte[] bufferSend = new byte[bufferTemp.Length + 4];
//big enough to receive response
byte[] bufferRec = new byte[65000];
//intial 4 characters as per standard
bufferSend[0] = byte.Parse("255");
bufferSend[1] = byte.Parse("255");
bufferSend[2] = byte.Parse("255");
bufferSend[3] = byte.Parse("255");
int j = 4;
for (int i = 0; i < bufferTemp.Length; i++)
{
bufferSend[j++] = bufferTemp[i];
}
//send rcon command and get response
try
{
this.server.Socket.Send(bufferSend, SocketFlags.None);
this.server.Socket.Receive(bufferRec);
}
catch (SocketException e)
{
MessageBox.Show(e.ToString(), "Error occured");
}
string response = Encoding.ASCII.GetString(bufferRec);
return response;
}
из всех команд, я могу, возможно, отправить, 1 из них возвращает намного больше данных, чем другие, и, кажется, что * buffer_rec * байтовый массив получает только около 1/4 из сообщения, но массив был объявлен достаточно большим, чтобы содержать все данные. В последующих трех запросах остальная часть данных выводится, как если бы она была забуферирована каким-то образом.
Я не знаю, почему это происходит. Если да, не могли бы вы сообщить мне, как исправить эту проблему?
Спасибо Crouz
'Метод приема считывает данные в параметр буфера и ** возвращает количество успешно прочитанных байтов **' http://msdn.microsoft.com/en-us/library/8s4y8aff.aspx –
I знаю, что это так, но мне не известно, сколько байтов должно быть полностью возвращено сервером, поэтому я не знаю, когда я закончил читать данные, которых боюсь. – Crouzilles
@ user1834208: Даже в стороне от этого, вы должны * всегда * использовать возвращаемое значение. В настоящий момент вы создаете строку из * целого * 'bufferRec', независимо от того, сколько данных было прочитано. Не делай этого. Затем вы должны использовать что-то вроде Wireshark, чтобы увидеть, что на самом деле происходит в сети. –