Java socket Server and Client dont send or recive data

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:
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:
Hi

why do you write in English?
You have written German threads in the past :confused:

Print the values of
Java:
if (MyClient.isConnected())
in Clients´s constructor

These is...-methods of Socket are not really reliable...
 
Hi

why do you write in English?
You have written German threads in the past :confused:

Print the values of
Java:
if (MyClient.isConnected())
in Clients´s constructor

These is...-methods of Socket are not really reliable...

ok, keine ahnung warum ich auf englisch geschrieben habe hab es garned gemerkt :D.
wie soll ich sonst überprüfen ob eine verbindung besteht?

gruss
 
Wirklich feststellen kann man das nur bei der Datenübertragung.
Das ist bei den Sockets leider generell so, in jeder Programmiersprache.
 
Hab den code jetz modifiziert und sende am anfang mit client und server 1 byte um zu überprüfen ob verbindung besteht.

Ich habs ich hab statt writeInt() nur write() verwendet. nun hab ich das problem das das beim anderen spieler lagt wenn man sich bewegt
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück