Hallo liebe java gemeinde ,
ich versuche einen sehr simplen chat server zu verwirklichen der zunächst nur in der eclipse laufen soll.
dazu habe ich 2 klassen erstellt:
die klasse server:
und die klasse Clients :
Bisher läuft es so, dass ich die Klasse "Server" ausführe und dazu einen "Client". #
der Server Spiegelt den Text, den der Client ihm schickt.
mit /q... kann die Verbindung beendet werden.
Nun ich möchte ich die Sache in dem Sinne erweitern, dass ich mehrere Clients auf dem Server laufen lassen kann, da es bisher nur mit einem Client geht!
Genau das bekomme ich aber nicht hin. ich weiß, dass es irgendwie mit Threads gehen müßte, nur weiß ich nicht wie ich das implementiere!
kann mir jemand helfen?
gruss Widdsen
ich versuche einen sehr simplen chat server zu verwirklichen der zunächst nur in der eclipse laufen soll.
dazu habe ich 2 klassen erstellt:
die klasse server:
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private BufferedReader read=null;
private PrintWriter write=null;
private String text;
private ServerSocket sso=null;
private Socket nso=null;
private int port=56000;
public Server(){
try{
this.sso=new ServerSocket(port);
this.waitFotClient();
//this.thread();
}
catch(Exception e){
System.err.println("Server fehlgeschlagen");
e.printStackTrace();
System.exit(1);
}
}
private void initRun(){
try{
this.text=this.read.readLine();
if(text.startsWith("/q")){
this.write.println("/q Verbindung wird beendet");
}
else{
this.write.println(text);
this.build();
this.initRun();
}
}
catch(Exception e1){
e1.printStackTrace();
try{
nso.close();
}
catch(Exception e2){
e2.printStackTrace();
}
}
}
private void build(){
try{
this.read=new BufferedReader
(new InputStreamReader(nso.getInputStream()));
this.write=new PrintWriter(nso.getOutputStream(),true);
}
catch(Exception e){
e.printStackTrace();
try{
nso.close();
}
catch(Exception e1){
e1.printStackTrace();
}
}
}
private void waitFotClient(){
while(true){
this.doAccept();
this.build();
this.initRun();
}
}
private void doAccept(){
try{
this.nso=this.sso.accept();
}
catch(Exception e){
e.printStackTrace();
try{
nso.close();
}
catch(Exception e1){
e1.printStackTrace();
}
}
}
public static void main(String[] args){
new Server();
}
}
und die klasse Clients :
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
private BufferedReader read=null;
private BufferedReader readFromSocket=null;
private PrintWriter write=null;
private String host="127.0.0.1";
private int port=56000;
private Socket so=null;
private String text;
public Client(){
this.connect();
this.build();
this.run();
}
private void connect(){
try{
so=new Socket(host,port);
}
catch(Exception e){
System.err.println("Client Erzeugung fehlgeschlagen");
e.printStackTrace();
System.exit(1);
}
}
private void build(){
try{
this.read=new BufferedReader
(new InputStreamReader(System.in));
this.write=new PrintWriter(so.getOutputStream(),true);
this.readFromSocket=new BufferedReader
(new InputStreamReader(so.getInputStream()));
}
catch(Exception e){
System.err.print("Build fehlgeschlagen");
e.printStackTrace();
System.exit(2);
}
}
public void exit()
{
System.exit(3);
}
private void run(){
System.out.println("Text eingeben..beenden mit /q");
while(true){
try{
this.text=this.read.readLine();
this.write.println(text);
this.text=this.readFromSocket.readLine();
System.out.println("Server spiegelt: "+ text);
if(text.startsWith("/q")){
System.exit(3);
//this.write.println(text);
}
}
catch(Exception e){
System.err.println("Run() wird nicht richtig ausgeführt");
e.printStackTrace();
System.exit(3);
}
}
}
public static void main(String[] args){
new Client();
}
}
Bisher läuft es so, dass ich die Klasse "Server" ausführe und dazu einen "Client". #
der Server Spiegelt den Text, den der Client ihm schickt.
mit /q... kann die Verbindung beendet werden.
Nun ich möchte ich die Sache in dem Sinne erweitern, dass ich mehrere Clients auf dem Server laufen lassen kann, da es bisher nur mit einem Client geht!
Genau das bekomme ich aber nicht hin. ich weiß, dass es irgendwie mit Threads gehen müßte, nur weiß ich nicht wie ich das implementiere!
kann mir jemand helfen?
gruss Widdsen