Servus,
wir haben derzeit ein Schulprojekt und müssen ein einfaches Spiel programmieren, welches auch im Netzwerk funktionieren soll. Allerdings kommen wir bei dem Thema Client/Server-Kommunikation an unsere Grenzen.
Wir haben keinerlei Ansätze zu dem Thema. Wir haben uns ein bisschen an einem YouTube Video und dieser Quelle orientiert.
Folgendes soll erfüllt werden:
Ich kann ja mal zeigen, was wir bislang haben:
Wir würden gerne von vorne anfangen, da wir mit eigenen Objekten und nicht nur mit Strings arbeiten möchten, außerdem ist das ganze schon ziemlich unübersichtlich geworden.
Ich hoffe es ist nicht zu viel verlangt, wenn ich um ein kleines Client- und Serverbeispiel bitte, in dem auch andere Objekte als String übergeben werden. Das Tutorial auf java.sun.com ist wirklich verdammt kompliziert und wir treten quasi auf der Stelle und kommen nicht weiter.
Besten Dank im Voraus!
Gruß
wir haben derzeit ein Schulprojekt und müssen ein einfaches Spiel programmieren, welches auch im Netzwerk funktionieren soll. Allerdings kommen wir bei dem Thema Client/Server-Kommunikation an unsere Grenzen.
Wir haben keinerlei Ansätze zu dem Thema. Wir haben uns ein bisschen an einem YouTube Video und dieser Quelle orientiert.
Folgendes soll erfüllt werden:
- Der Server muss mehrere Clients gleichzeitig verwalten können
- Objekte müssen übertragen werden können (Spieler, Spielfeld, etc.)
- Der Server wird in verschiedenen Fenstern benötigt (Anmelden, Mehrspieler-Spiel, Chat, etc.)
Ich kann ja mal zeigen, was wir bislang haben:
Java:
public class CServer
{
private BufferedReader in = null;
private PrintWriter out = null;
private String incomingLine = null;
private VServer serverView;
private ArrayList<String> ipAllerClients = new ArrayList<String>();
private Datenbank db = new Datenbank();
private ServerSocket server = null;
class InputThread extends Thread
{
private boolean running = true;
public void run()
{
while(running)
{
try
{
incomingLine = in.readLine();
if(!incomingLine.isEmpty())
{
empfangen();
}
}
catch (IOException e)
{
running = false;
}
}
}
}
public CServer(VServer p_serverView) throws IOException
{
System.out.println("Server");
this.serverView = p_serverView;
server = new ServerSocket(0);
this.serverView.setTxtIpAddress(InetAddress.getLocalHost().toString() );
this.serverView.setTxtPort(Integer.toString( server.getLocalPort() ) );
while(true)
{
Socket clientSocket = server.accept();
this.ipAllerClients.add(clientSocket.getInetAddress().toString());
in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out=new PrintWriter(new OutputStreamWriter(
clientSocket.getOutputStream()));
new InputThread().start();
System.out.println(this.ipAllerClients.size());
}
}
public void empfangen()
{
String[] stringProtokoll;
stringProtokoll=incomingLine.split(";");
switch (stringProtokoll[1])
{
case "login":
anmelden(stringProtokoll);
System.out.println(incomingLine);
break;
case "passwort":
break;
case "lobby":
if(stringProtokoll[2].equals("chat"))
{
lobbyChatHinzufuegen(stringProtokoll);
}
break;
case "spiel":
break;
case "status":
break;
case "spname":
break;
case "salt":
saltHolen(stringProtokoll);
break;
case "offline":
setClientOffline(stringProtokoll);
break;
}
}
public void lobbyChatHinzufuegen(String[] stringProtokoll)
{
String tmpName = stringProtokoll[3];
String tmpChat = stringProtokoll[4] ;
this.serverView.setChatModel(tmpName + " " + tmpChat);
this.serverView.getListChat().repaint();
}
public void anmelden(String[] stringProtokoll)
{
String SendenProtokol;
if( this.db.vglPasswort(stringProtokoll[2], stringProtokoll[3]) )
{
SendenProtokol = stringProtokoll[0] + ";login;true";
senden(SendenProtokol);
}
else
{
SendenProtokol = stringProtokoll[0] + ";login;false";
senden(SendenProtokol);
}
}
public void saltHolen(String[] stringProtokoll)
{
String SendenProtokol;
String tmpSalt = db.getSalt(stringProtokoll[2]);
if(tmpSalt.length() == 10)
{
SendenProtokol = stringProtokoll[0] + ";salt;" + tmpSalt;
}
else
{
SendenProtokol = stringProtokoll[0] + ";salt;false";
}
senden(SendenProtokol);
}
private void senden(String uebertragungsProtokoll)
{
this.out.println(uebertragungsProtokoll);
this.out.flush();
}
private void setClientOffline(String[] stringProtokoll)
{
int index = this.ipAllerClients.indexOf( stringProtokoll[0] );
this.ipAllerClients.remove(index);
System.out.println(this.ipAllerClients.size());
}
@Override
protected void finalize() throws Throwable
{
this.server.close();
in.close();
out.close();
super.finalize();
}
}
Ich hoffe es ist nicht zu viel verlangt, wenn ich um ein kleines Client- und Serverbeispiel bitte, in dem auch andere Objekte als String übergeben werden. Das Tutorial auf java.sun.com ist wirklich verdammt kompliziert und wir treten quasi auf der Stelle und kommen nicht weiter.
Besten Dank im Voraus!
Gruß