Too much delay while sending object over UDP to server
- by RomZes
I'm getting 4 sec delay when sending objects over UDP. Working on small game and trying to implement multiplayer. For now just trying to synchronize movements of 2 balls on the screen. StartingPoint.java is my server(first player), that receiving serialized objects (coordinates). SecondPlayer.java is client that sending serialized objects to server.
When I'm moving my first object it appears 4 seconds later on different screen.
StartingPoint.java
@Override
public void run() {
byte[] receiveData = new byte[256];
byte[] sendData = new byte[256];
// DatagramSocket socketS;
try {
socket = new DatagramSocket(5000);
System.out.println("Socket created on "+ port + " port");
} catch (SocketException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true){
b1.update(this);
b3.update();
System.out.println("Starting server...");
//// Receiving and deserializing object
try {
//socket.setSoTimeout(1000);
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
byte[] data = packet.getData();
ByteArrayInputStream in = new ByteArrayInputStream(data);
ObjectInputStream is = new ObjectInputStream(in);
// socket.setSoTimeout(300);
b1 = (Ball) is.readObject();
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
try { Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
SecondPlayer.java
@Override
public void run() {
while(true){
b.update();
networkSend();
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void networkSend(){
// Serialize to a byte array
try {
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
ObjectOutputStream oo;
oo = new ObjectOutputStream(bStream);
oo.writeObject(b);
oo.flush();
oo.close();
byte[] bufCar = bStream.toByteArray();
//socket = new DatagramSocket();
//socket.setSoTimeout(1000);
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket packet = new DatagramPacket(bufCar, bufCar.length, address, port);
socket.send(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}