我有以下方法將rcon命令發送到遊戲服務器。C#udp套接字未收到整個郵件
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,但數組已被聲明爲足以包含所有數據。 在隨後的3個請求中,其餘數據會被輸出,就好像它以某種方式被緩衝了一樣。
我不知道這是爲什麼發生。如果你這樣做,可否請讓我知道如何解決這個問題?
謝謝 Crouz
'接收方法讀取數據到緩衝區參數和**返回成功讀取的字節數**'http://msdn.microsoft.com/en-us/library/8s4y8aff.aspx –
I知道它的確如此,但是我無法知道服務器應該返回多少字節,所以我不知道我什麼時候讀完數據。 – Crouzilles
@ user1834208:即使除此之外,您應該總是*使用返回值。目前你正在從'bufferRec'的*整個*中創建一個字符串,而不管有多少數據被讀取。不要這樣做。接下來,你應該使用類似Wireshark的東西來查看網絡上發生的*實際情況。 –