ゲームサーバーに rcon コマンドを送信する次の方法があります。
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 つの要求では、何らかの方法でバッファリングされたかのように、残りのデータが出力されます。
なぜこれが起こっているのかわかりません。もしよろしければ、問題を解決する方法を教えていただけないでしょうか。
クローズさんありがとう