BlackPsycho
Mitglied
Java socket Server and Client lag, wie kann ich das beheben?
Hi, ich komme mit meinem Java Server und Client nicht weiter. Es werden keine Daten Gesendet und nicht Empfangen.
Ich bekomm keine Exceptions und die Lesen und Senden einfach nicht, der server und client ist jeweils ein seperater Thread.
Ich bekomm diese server message: Got Connection to Client, server derp
Beim Client bekomme ich: derp client run, Got Connection to Server, derp Client
Das sollte heissen die senden daten oder versuchen es, und irgendwie gehn die daten verloren beim übertragen.
Der server und client wird direkt aus dem spiel gestartet, es soll nen einfacher top down acade shooter werden mit netzwerk unterstützung.
#EDIT:
Position der spieler wird geupdated blos beim anderen spieler ruckelt das schiff dann, so ne art lag. zb. PlayerA = host, PlayerB = client.
PlayerA macht spiel auf.
PlayerB tritt bei.
PlayerA bewegt sich.
Auf PlayerB's bildschirm lagt PlayerA sein schiff.
#EDIT 2:
Lag hab ich behoben indem ich nur die delta werte übergeben hab statt die kompletten koordinaten. Jetz is nurnoch die frage wie ich die gegener positionen usw am besten verschicke und auslese. Da die positionen zufallsgeneriert sind.
Starting Server:
Starting Client:
Server Code:
Client Code:
Hi, ich komme mit meinem Java Server und Client nicht weiter. Es werden keine Daten Gesendet und nicht Empfangen.
Ich bekomm keine Exceptions und die Lesen und Senden einfach nicht, der server und client ist jeweils ein seperater Thread.
Ich bekomm diese server message: Got Connection to Client, server derp
Beim Client bekomme ich: derp client run, Got Connection to Server, derp Client
Das sollte heissen die senden daten oder versuchen es, und irgendwie gehn die daten verloren beim übertragen.
Der server und client wird direkt aus dem spiel gestartet, es soll nen einfacher top down acade shooter werden mit netzwerk unterstützung.
#EDIT:
Position der spieler wird geupdated blos beim anderen spieler ruckelt das schiff dann, so ne art lag. zb. PlayerA = host, PlayerB = client.
PlayerA macht spiel auf.
PlayerB tritt bei.
PlayerA bewegt sich.
Auf PlayerB's bildschirm lagt PlayerA sein schiff.
#EDIT 2:
Lag hab ich behoben indem ich nur die delta werte übergeben hab statt die kompletten koordinaten. Jetz is nurnoch die frage wie ich die gegener positionen usw am besten verschicke und auslese. Da die positionen zufallsgeneriert sind.
Starting Server:
Java:
try {
serverThread = new Thread(new Server());
serverThread.start();
//server = new Server();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Starting Client:
Java:
try {
clientThread = new Thread(new Client());
clientThread.start();
//client = new Client();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Server Code:
Java:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server implements Runnable
{
ServerSocket serverSocket = null;
DataInputStream iStream;
DataOutputStream outputStream;
Socket clientSocket = null;
byte b = 0;
//Thread serverThread =
public Server () throws IOException
{
try {
serverSocket = new ServerSocket(8888);
} catch (Exception e)
{
System.out.println(e);
}
try {
clientSocket = serverSocket.accept();
iStream = new DataInputStream(clientSocket.getInputStream());
outputStream = new DataOutputStream(clientSocket.getOutputStream());
while (b == 0)
{
outputStream.writeByte(1);
b = iStream.readByte();
}
} catch (Exception e) {
}
}
@Override
public void run() {
// TODO Auto-generated method stub
if (b == 1)
{
System.out.println("Got Connection to Client");
while (true)
{
System.out.println("Server Sending & Recieving");
try {
outputStream.writeInt(GameFrame.player.deltax);
GameFrame.deltaX = iStream.readInt();
outputStream.writeByte(1);
b = iStream.readByte();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (b == 0)
{
break;
}
b = 0;
}
System.out.println("Shutting Down Server...");
try {
outputStream.close();
iStream.close();
serverSocket.close();
GameFrame.serverCreated = false;
GameFrame.state = null;
GameFrame.closeServer = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Server Shutdown!");
}
}
}
Client Code:
Java:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Client implements Runnable {
static Socket MyClient;
static DataInputStream iStreamClient;
static DataOutputStream outputStreamClient;
byte b = 0;
public Client() throws IOException
{
while (true) {
MyClient = new Socket("127.0.0.1", 8888);
iStreamClient = new DataInputStream(MyClient.getInputStream());
outputStreamClient = new DataOutputStream(MyClient.getOutputStream());
while (b == 0)
{
b = iStreamClient.readByte();
outputStreamClient.writeByte(1);
}
if (b == 1)
{
GameFrame.connected = true;
break;
}
}
}
@Override
public void run() {
System.out.println("derp client run");
// TODO Auto-generated method stub
if (b == 1)
{
System.out.println("Got Connection to Server");
while (true)
{
System.out.println("Client Sending & Recieving");
try {
GameFrame.deltaX = iStreamClient.readInt();
outputStreamClient.writeInt(GameFrame.player2.deltax);
b = iStreamClient.readByte();
outputStreamClient.writeByte(1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (b == 0)
{
break;
}
b = 0;
}
System.out.println("Shutting Down Client...");
try {
outputStreamClient.close();
iStreamClient.close();
MyClient.close();
GameFrame.connected = false;
GameFrame.state = null;
GameFrame.closeClient = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Client Shutdown!");
}
}
}
Zuletzt bearbeitet: