Chat Server/mehre Client

dng

Mitglied
Hallo Zusammen,

ich habe hier ein problem mit der Compilierung.Und ich weisst nicht woran liegt die Fehler.
Kann jemand in mein Kode schauen. voran liegt die Fehler.Danke

hier ist der Server-Code

Java:
package tools;

import java.io.*;
import java.net.*;
import java.util.*;
/**
 * @author dng
 *
 */
public class Server implements Runnable {
	ServerSocket server;
	int port;
	private BufferedReader socket_in;
	private PrintWriter socket_out;
	private Socket clientSocket;
	public  List<ConnectionHandler> cHandler =new ArrayList<>();
	
	
	public Server(int port){
		this.port=port;
	}
	//Verbindung Server-Client
	@Override
	public void run() {
	//public void verbindungClientServer(){
		// TODO Auto-generated method stub
		try {
			server= new  ServerSocket(port);
			
			
			System.out.println("waiting for connection request from client");
			while(true){
				try {
				 clientSocket =  server.accept();
				 ConnectionHandler handler = new ConnectionHandler(clientSocket);
				 cHandler.add(handler);
				 new Thread(handler).start();
				 
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				 System.out.println(clientSocket.getInetAddress()+" is connected");
				 String message="welcome to Server";
				 String msg=message.toString() + '\n';
				 socket_out.println(msg);
			     socket_out.flush();
				 //clientSocket.close();
				/* socket_out.print(socket_in.readLine());
				 socket_out.flush();*/
				 
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public static void main(String []args){
		
		new Thread(new Server(9075)).start();
		
	// TODO Auto-generated method stub
	}


	
}

und hier ConnectionHandler
Java:
/**
 * 
 */
package tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.*;

/**
 * @author dng
 *
 */
public class ConnectionHandler implements Runnable{
	Socket conHandsocket;
	volatile boolean interrupted;

	ConnectionHandler(Socket conHandsocket) {
		this.conHandsocket = conHandsocket;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		//Ein Handler der Verbindung aller Clients Verbindung
		try {
			System.out.println("waiting for connection request from client");
			//conHandsocket.setSoTimeout(100);
			BufferedReader socket_in = new BufferedReader(new InputStreamReader(conHandsocket
				.getInputStream()));
			PrintWriter socket_out = new PrintWriter(conHandsocket.getOutputStream(), true);
		
			
			//conHandsocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

und hier der Client

Java:
package tools;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/** @author Eugen Labun */
public class Client {
	Socket clientsocket;
	int port;
	private BufferedReader socket_in;
	private PrintWriter socket_out;
	private String name;
	private String host;

	public Client( String host, int port) {
		this.port = port;
		this.host = host;
	}

	public void verbindungAufbau() {
		try {
			clientsocket = new Socket(host, port);
			verbindungAufbau();
			socket_in = new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
			socket_out = new PrintWriter(clientsocket.getOutputStream(),true);
			String message=(String)socket_in.readLine();
			System.out.println(" Message from server: "+message);
			//clientsocket.close();
			//socket_out.flush();
		} catch (IOException ex) {
			/*}finally{
		
				try {
					clientsocket.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}*/
			}
			
		}

		
	

	public static void main(String[] args) {
		//new Thread(new Client("localhost", 9075)).start();
		new Client("localhost",9075).verbindungAufbau();
	}
/*
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try{
			verbindungAufbau();
			socket_in = new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
			socket_out = new PrintWriter(clientsocket.getOutputStream(),true);
			String message=(String)socket_in.readLine();
			System.out.println(" Message from server: "+message);
			clientsocket.close();
			socket_out.flush();
			
		}catch(Exception e){
		
		}finally{
		
				
		
			
		}
		
	}*/
}




Danke

MFG dng
 

Phash

Top Contributor
könnte mir jetzt erstmal vorstellen, dass du in deiner "while(true)" Schleife dauernd neue Threads startest, und zwar ohne Bedingung...

Du solltest evtl nur einen Thread starten, wenn sich ein Client verbindet, und nicht dauernd... (du wirst wohl einige Male pro Sekunde was neues starten und das knallt halt dann recht zügig)


Allerdings ist es schwer, wenn du keine Fehlermeldung postest.

P.S. mach mal einen Breakpoint in deinen Server, und debug das Ganze
 
Zuletzt bearbeitet:

turtle

Top Contributor
Dein Connection-Handling ist falsch.

Beispielsweise hast du im Server-Code folgende Zeilen
Java:
socket_out.println(msg);
socket_out muss aber an der Stelle null sein, also NPE. Du behandelst ja jeden Client in einem eigenen Thread. Daher muss der Server "nur" auf neue Clients warten (accept).
Java:
		    System.out.println("waiting for connection request from client");
		    clientSocket = server.accept();
		    ConnectionHandler handler = new ConnectionHandler(clientSocket);
		    cHandler.add(handler);
		    new Thread(handler).start();
		}
Im Client sehe ich einen rekursiven Aufruf, der ebenfalls keinen Sinn macht.
Java:
public void verbindungAufbau() {
        try {
            clientsocket = new Socket(host, port);
            verbindungAufbau();
Das habe ich mal weggemacht und schon läuft es. Jedenfalls kann ein Client sich verbinden, Eingaben machen und diese werden an den Server geschickt.
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * @author dng
 * 
 */
public class Server implements Runnable {
    ServerSocket server;
    int port;
    private BufferedReader socket_in;
    private PrintWriter socket_out;
    private Socket clientSocket;
    public List<ConnectionHandler> cHandler = new ArrayList<>();

    public Server(int port) {
	this.port = port;
    }

    // Verbindung Server-Client
    @Override
    public void run() {
	try {
	    server = new ServerSocket(port);

	    try {
		while (true) {
		    System.out.println("waiting for connection request from client");
		    clientSocket = server.accept();
		    ConnectionHandler handler = new ConnectionHandler(clientSocket);
		    cHandler.add(handler);
		    new Thread(handler).start();
		}
	    } catch (IOException e) {
		e.printStackTrace();
	    }
	} catch (IOException e) {
	    e.printStackTrace();
	}

    }

    public static void main(String[] args) {

	new Server(9075).run();
    }
}
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/** @author Eugen Labun */
public class Client {
    Socket clientsocket;
    int port;
    private BufferedReader socket_in;
    private PrintWriter socket_out;
    private String name;
    private String host;

    public Client(String host, int port) {
	this.port = port;
	this.host = host;
    }

    public void verbindungAufbau() {
	try {
	    clientsocket = new Socket(host, port);
	    socket_in = new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
	    socket_out = new PrintWriter(clientsocket.getOutputStream(), true);
	    String message = (String) socket_in.readLine();
	    System.out.println(message);
	    while (true) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String clientLine = br.readLine();
		socket_out.println(clientLine);
	    }
	} catch (IOException ex) {
	    ex.printStackTrace();
	}

    }

    public static void main(String[] args) {
	new Client("localhost", 9075).verbindungAufbau();
    }
}
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.*;

/**
 * @author dng
 * 
 */
public class ConnectionHandler implements Runnable {
    Socket conHandsocket;
    volatile boolean interrupted;
    private BufferedReader socket_in;
    private PrintWriter socket_out;

    ConnectionHandler(Socket conHandsocket) {
	System.out.println(conHandsocket.getInetAddress() + " is connected");
	this.conHandsocket = conHandsocket;
	try {
	    socket_in = new BufferedReader(new InputStreamReader(conHandsocket.getInputStream()));
	    socket_out = new PrintWriter(conHandsocket.getOutputStream(), true);
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }

    @Override
    public void run() {
	String message = "Welcome to Server";
	String msg = message.toString() + '\n';
	socket_out.println(msg);
	socket_out.flush();
	System.out.println("waiting for connection request from client");
	while (true) {
	    try {
		String readLine = socket_in.readLine();
		System.out.println("Client sent:" + readLine);

		// conHandsocket.close();
	    } catch (IOException e) {
		e.printStackTrace();
	    }
	}

    }
}
 

Anti-Banane

Gesperrter Benutzer
leute ... dafür braucht man doch keine fehlermeldungen .. den code kann man doch mal eben schnell im kopf durchgehen

server :

main ->
Thread.start() ->
new ServerSocket() ->
accept() ... und genau so macht man es mit normalen I/O > in einem loop auf eingehende verbindungen warten, also völlig ok ... ->
new ConnectionHandler() ->
List.add() ->
Thread.start() ->
String gedöns ... ernsthaft ? String.toString() ... OUCH ! ... ->
socket_out.println() > NPE ->
flush() > NPE

client :

main ->
verbindungAufbau() ->
new Socket() ->
verbindungAufbau() > rekursiver aufruf > StackOverflow


ernsthaft ... ihr wollte fehlermeldungen obwohl man schon beim bloßen querlesen erkennt was hier sache ist ... nämlich das TO mal überhaupt keine ahnung von dem hat was er eigentlich machen will und daher nur code ausm netz zusammen geklickt hat
 

dng

Mitglied
Hallo,

Danke fuer die Anrworten,die Fehlermeldung war

Exception in thread "Thread-0" java.lang.NullPointerException
at tools.Server.run(Server.java:47)
at java.lang.Thread.run(Thread.java:744)



ich schau mal was @turtel gepostet hast.Ich bin noch beim lesen
 
Zuletzt bearbeitet:

dng

Mitglied
Hallo zusammen,
es gibt par sachen, dass ich nicht versteht bei @turtel, koenntest du mir ,bitte es erklaere @turtel oder andere koennen auch dazu sagen
Java:
while (true) 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String clientLine = br.readLine();
        
        socket_out.println(clientLine);




danke
mfg sng
 

turtle

Top Contributor
Nun, dein Client-Code lief so, dass er etwas ausgab und dann war das mit dem Client.

Da dein Code zum Beenden eines Client noch nicht fertig ist und der Server "ungehalten" reagiert, wenn der Client einfach wegkracht, habe ich das Verhalten geändert.

Und zwar läuft "mein" Client in einer Endlosschleife und liest darin Zeilen ein, die der Benutzer eingibt. Diese sendet er dann zum Server. Im Connection-Handler siehst du, das die empfangene Zeile vom Client einfach ausgegeben wird, auch hier wieder in einer Endlosschleife.

Üblicherweise sendet ein Client ein bestimmtes Kommando zum Server, so das dieser erkennen kann, das der Client seine Verbindung beenden möchte. Beide (Client und Server) können dann ihre Verbindungen entsprechend updaten und der Server beispielsweise den Thread beenden.
 

dng

Mitglied
ok, danke, und veilen dDnk fuer deine Hilfe.ich verstehe besser.

Ich moechte ein command von Cleint zu Server insofern senden:
Client ->sendet-> message:Message

Server->bestaetigt der Empfang nicht
und dannn

Server->sendet an alle Client ->message :NAME:MESSAGE

Hat jemand eine Idee von der Algorithm


Danke


mfg dng
 
Zuletzt bearbeitet:

Anti-Banane

Gesperrter Benutzer
du willst also einen einfach chat basteln ... dann nutz bitte die sufu oder google ... es wurden hier schon unzählige besipiele gepostet wie sowas "mal eben schnell" umsetzbar ist
und google liefert auch teilweise sehr schöne erklärungen was da unter der haube so alles passiert das man es auch nachvollziehen kann



so n BISSCHEN eingeninitiative sollte man schon haben wenn man programmieren will
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
S Java Chat Server Netzwerkprogrammierung 8
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
O Chat (Server) sendet an verschieden Benutzer. Netzwerkprogrammierung 10
L Chat Server programmieren Netzwerkprogrammierung 10
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
I Chat-Client empfängt nichts vom Server Netzwerkprogrammierung 3
A Socket UDP Chat Verbindungsproblem im WWW (Server sendet ins leere) Netzwerkprogrammierung 11
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
AMStyles Client Server basierter Chat Netzwerkprogrammierung 7
D Hilfe ich komme bei meinem UDP chat Server nicht mehr weiter Netzwerkprogrammierung 9
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
K Chat: Nur 1 Verbindung zum Server möglich :( Netzwerkprogrammierung 6
S JAV07P SGD client/server chat Netzwerkprogrammierung 4
L Chat Fenster Netzwerkprogrammierung 1
P Chat in Java Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
Androbin Socket Fehlerhafter Applet-Chat Netzwerkprogrammierung 12
C Microsoft Comic Chat Netzwerkprogrammierung 0
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
J Chat programmieren Netzwerkprogrammierung 12
TheJavaKid Webcam-Chat im Applet (ChatRoulette Klon) Netzwerkprogrammierung 10
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
K chat Netzwerkprogrammierung 13
F RMI einfacher Chat - Callbacks(?) funktionieren nicht Netzwerkprogrammierung 7
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
T Socket Java Chat Netzwerkprogrammierung 2
xDarkSunx Chat JFrame Netzwerkprogrammierung 3
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
E JAVA Chat Netzwerkprogrammierung 19
C Java Chat funktioniert nicht richtig Netzwerkprogrammierung 6
A Multi-User-Chat Netzwerkprogrammierung 2
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
E Userliste für Chat Applet Netzwerkprogrammierung 4
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
M chat als applet umgeschrieben - unbekannter fehler :( Netzwerkprogrammierung 2
P Socket Chat selbst bauen + Multiusereditor Netzwerkprogrammierung 13
T Java Chat über UDP Netzwerkprogrammierung 7
Developer_X Habe fragen zur Chat Programmierung Netzwerkprogrammierung 4
P Java Multiuser Chat hohe Systemauslastung Netzwerkprogrammierung 24
B Die alte Leier: "Chat" Netzwerkprogrammierung 3
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
DamienX Chat Socketserver/Client. wo ist das Problem? Netzwerkprogrammierung 2
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
A Wichtig für einen Chat? Netzwerkprogrammierung 4
S Java Applet Chat Grundsatzfrage Netzwerkprogrammierung 6
R Java Chat über Inet connecten Netzwerkprogrammierung 3
F Chat Programm. Verständnisfrage while-Schleife Netzwerkprogrammierung 7
P Probleme bei Chat programm Netzwerkprogrammierung 2
C Voice Chat Netzwerkprogrammierung 3
G FAQ Chat geht nicht ? Netzwerkprogrammierung 4
T Schriftfarbe im Chat ändern Netzwerkprogrammierung 2
G ActionEvent klappt beim Chat nicht Netzwerkprogrammierung 5
T Chat-Client Netzwerkprogrammierung 12
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
T Chat mit mehreren Clients Netzwerkprogrammierung 3
C Chat , Streamproblem, PumpingException, Danke Netzwerkprogrammierung 2
S RMI Chat Problem, Client bekannt machen Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
K Lokaler Chat Netzwerkprogrammierung 5
S Chat aufs Internet ausweiten Netzwerkprogrammierung 5
J Router behindert Chat Netzwerkprogrammierung 9
S Knuddels Chat System: Bot / Nachrichten verschicken? Netzwerkprogrammierung 6
G Chat - was brauch ich Netzwerkprogrammierung 2
André B. Brauche Hilfe bei Chat Netzwerkprogrammierung 6
K Problem mit "Chat" Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
Paule Acces denied bei Chat Netzwerkprogrammierung 6
B Multi-chat Problem Netzwerkprogrammierung 3
N Java Chat-Problem Netzwerkprogrammierung 4
G Java Chat mit HTML Cleint Netzwerkprogrammierung 3
G Chat Programm - was ist los? Netzwerkprogrammierung 9
Z chat: wann http und wann sockets verwenden? Netzwerkprogrammierung 11
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
R Mini-Chat löst BindException aus Netzwerkprogrammierung 7
F Multiclient Chat Netzwerkprogrammierung 12
K Chat: Verbindung kommt nicht zu stande Netzwerkprogrammierung 6
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9
S Einfacher Multiuser chat in java Netzwerkprogrammierung 18
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
E Server mit GUI Netzwerkprogrammierung 4
E FTP FTPS Server gibt Fehlernachricht "522 SSL/TLS required on the data channel" zurück Netzwerkprogrammierung 1
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
Eigenen Rechner als Server? Netzwerkprogrammierung 16
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
J Datei Download vom Server Netzwerkprogrammierung 8
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
K Threads/Server/telnet Fehler Netzwerkprogrammierung 2
J Multithreaded-Server Netzwerkprogrammierung 21
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15

Ähnliche Java Themen

Neue Themen


Oben