だから私はJavaサーバーとクライアントを持っています。データはサーバーに正常に送信され、サーバーはそれを処理していますが、サーバーが送信したものにクライアントが応答するのに時間がかかることがわかりました。サーバーがクライアントに送信しているデータが、送信すべきデータよりもはるかに長いということです。
クライアントに送信されたパケットには、送信したすべてのデータが含まれていますが、その後にも多くの空白があります。これを修正したいのですが、何かアイデアはありますか?
データを取得するための私のコードは、サーバー上のすべてのクライアントの単純な for ループです。これにより、クライアント データが文字列に追加され、その文字列がパケットに追加されます。
クラス PlayerList
public static String getString()
{
String message = "";
for(int x = 0; x < list.size(); x++)
{
Player player = list.get(x);
if(message.equals(""))
{
message += player.name+";"+player.address+";"+player.pos[0]+";"+player.pos[1]+";"+player.fakeRotation+";"+player.rotation+";"+player.rotationSpeed+";"+player.speed+";"+player.sheildEnabled+";"+player.sheildStrength+";"+player.health;
}
else
{
message += ","+player.name+";"+player.address+";"+player.pos[0]+";"+player.pos[1]+";"+player.fakeRotation+";"+player.rotation+";"+player.rotationSpeed+";"+player.speed+";"+player.sheildEnabled+";"+player.sheildStrength+";"+player.health;
}
}
System.out.println(message);
return message;
}
クラス送信
while(Server.serverRunning)
{
for(int p = 0; p < PlayerList.list.size(); p++)
{
Player player = PlayerList.list.get(p);
try
{
byte[] buf = PlayerList.getString().getBytes();
//send the message to the client to the given address and port
packet = new DatagramPacket(buf, buf.length, player.address);
Server.socket.send(packet);
}
catch (IOException e)
{
System.out.println("Can't send packet to player: "+player.name);
}
}
}
getString メソッドから受け取ったデータは正しく、テストしたところ空白がないことがわかっているので、パケットに文字列を追加すると空白が発生するはずです。
意図したデータは、次のように出力に表示されます。
Luke;127.0.0.1:63090;50.0;50.0;0.0;0.0;0.0;0.0;true;100;100
ただし、実際のデータはクライアントに次のように表示されます。
Luke;127.0.0.1:63090;50.0;50.0;0.0;0.0;0.0;0.0;true;100;100 (lots of spaces here) ...line is too long, please switch to wrapped mode to see whole line...
データを受信するクライアント コードは次のとおりです。
receiveData = new byte[clientSocket.getReceiveBufferSize()];
receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
receiveMessage = new String(receivePacket.getData());