EchoServer in Applikation zum Spielen nutzen?

Status
Nicht offen für weitere Antworten.
R

Ramulen

Gast
Hallo alle zusammen.
Ich wollte ein kleines Spielchen programmieren. Diesmal sollte es aber nur per Server/Client funktionieren.
Hab mir mal 2 Klassen gebastelt.
EchoServer und EchoClient. Die funktionieren auch so weit. Das Problem ist nur, wenn ich den Server starte macht der NIX mehr. Er wartet und wartet als auf Eingaben des Clienten. Wenn ich was Eintippe(im Client) funzt das auch.
Nur möchte ich gerne das ein Spieler den Server startet und dann auch noch spielen kann.
Bisher gibt der Server nicht mal nen System.our.println("asdasd") aus, falls es hinter der "Eröffnung" des Servers steht.

Kann man ueberhaupt so etwas mit nem Echoserver realisieren ?
Wie gesagt ich möchte das ein Spieler den Server startet und der andere Spieler dann ueber die IP des Servers Verbindung aufnimmt.

Mal mein Code:
EchoServer:
Code:
import java.net.*;
import java.io.*;
 
public class EchoServer {
	
	public EchoServer() throws IOException {

	ServerSocket serverSocket = null;
	int port=1100;
	try {
		serverSocket = new ServerSocket(port);
	} catch (IOException e) {
		System.err.println("port " + port + "ist belegt");
		System.exit(1);
	}

	Socket clientSocket = null;
	try {
		clientSocket = serverSocket.accept();
	} catch (IOException e) {
		System.err.println("Fehler bei der Annahme der Verbindung");
		System.exit(1);
	}

	PrintWriter zumClient = new PrintWriter(clientSocket.getOutputStream(), true);
	BufferedReader vomClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
		String ein;
		zumClient.println("Hallo, hier ist der Echo-Server");

		while ((ein = vomClient.readLine()) != null) {
			 zumClient.println("Vom Server " + ein);
		}
		zumClient.close();
		vomClient.close();
		clientSocket.close();
		serverSocket.close();
	}
}

EchoClient:
Code:
import java.io.*;
import java.net.*;

public class EchoClient {
	
	static PrintWriter zumServer;
	
	public EchoClient() throws IOException {
		Socket echoSocket = null;
		zumServer = null;
		BufferedReader vomServer = null;
	//	JOptionPane op = new JOptionPane();
	//	String hostname = op.toString();
		String hostname="localhost";
		System.out.println("HOST: "+hostname);
		try {
			echoSocket = new Socket(hostname,1100);
			zumServer = new PrintWriter(echoSocket.getOutputStream(), true);
			vomServer = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
		} catch (UnknownHostException ausnahme) {
			System.err.println("Host : "+ hostname + "unbekannt");
			System.exit(1);
		} catch (IOException fehler) {
			System.err.println("Kann keine IO-Verbindung zu" + hostname + "herstellen");
			System.exit(1);
		}

	BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
	String tastatureingabe;
	String nachricht = vomServer.readLine();
	System.out.println(nachricht);
	while ((( tastatureingabe = ein.readLine()) != null) &&  (!tastatureingabe.equals("bye"))){   
		if ( tastatureingabe.equals("Timo")){
		    zumServer.println("HALLO MEIN MEISTER !!!");
		    nachricht = vomServer.readLine();
			System.out.println("Echo :" + nachricht);
		}
		else {
			zumServer.println(tastatureingabe);
			nachricht = vomServer.readLine();
			System.out.println("Echo :" + nachricht);
		}
	}
	if ( tastatureingabe.equals("bye"))
	  zumServer.println("bye");
	
	zumServer.close();
	vomServer.close();
	echoSocket.close();
	}
}
 
R

Ramulen

Gast
ja sorry das war keine Absicht. Wollte den zweiten auch löschen konnt ich aber nich.. Bring mich doch nich gleich um.
 

foobar

Top Contributor
Code:
package echodemo;
import java.io.*;
import java.net.*;
public class EchoServer
{
	public EchoServer() throws IOException
	{
		ServerSocket serverSocket = null;
		int port = 1100;
		try
		{
			serverSocket = new ServerSocket(port);
			new Broker(serverSocket.accept()).start();
		}
		catch (IOException e)
		{
			System.err.println("port " + port + "ist belegt");
			System.exit(1);
		}
		System.out.println("Server running ....");
	}
	public static void main(String[] args)
	{
		try
		{
			new EchoServer();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}


class Broker extends Thread
{
	private Socket soc;
	public Broker(Socket soc)
	{
		this. soc = soc;
	}
	public void run()
	{
		PrintWriter zumClient;
		try
		{
			zumClient = new PrintWriter(soc.getOutputStream(), true);
			BufferedReader vomClient = new BufferedReader(new InputStreamReader(soc.getInputStream()));
			String ein;
			zumClient.println("Hallo, hier ist der Echo-Server");
			while ((ein = vomClient.readLine()) != null)
			{
				zumClient.println("Vom Server " + ein);
			}
			zumClient.close();
			vomClient.close();
			soc.close();
		}
		catch (IOException e1)
		{
			e1.printStackTrace();
		}
	}
}
 

Grizzly

Top Contributor
Ich verstehe leider nicht so ganz das Problem :bahnhof: . Kannst Du es nochmal etwas verständlicher formulieren? Klingt für mich ein bisschen danach, als strebst Du eine Lösung wie bspw. bei Quake 3 oder Doom 3. Habe ich das richtig verstanden?
 

abdelmalek

Mitglied
hallo

ich habe folgendes in server seite While (true){...} gemacht
while(true)
{
... //wie vorhin

//am ende

new Thread(){
public void run(){
b1.start();
}
}.start();

new Thread(){
public void run(){
b2.start();
}
}.start();

}

leider funktioniert nicht.

mit brocken habe ich versucht zu verstehen wie ich mein server einrichten. leider nix. ich erfahre zum ersten mal das beispiel. könntet ihr mich noch mal oientiren. Ich weiss nicht wie ich euch danke.
 

foobar

Top Contributor
@abdelmalek Bitte für jedes Thema nur einen Thread benutzen !!!!

Das vorherige Posting bezieht sich auf folgenden Thread
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben