Versuch Server - Client anwendung

Status
Nicht offen für weitere Antworten.

darkeye2

Bekanntes Mitglied
Hallo leute, dachte mir, ich wage mich mal langsamm an meine erste server - client anwendung, und da war das simpelste, was ich fand ein chat, der einfach nachrichten hin und her sendet.

hier meine server anwendugn:

Java:
import java.io.*;
import java.net.*;
import java.util.ArrayList;

public class Server {

	protected static final String MASTER = "ChatBot";
	protected static final  String SEP = ": ";
	protected ServerSocket server;
	protected ArrayList clients;
	
	Server() {
		
		clients = new ArrayList();
		try{
			server = new ServerSocket(5554);
		} catch(IOException e){System.out.println("Fehler1: "+ e);}
		
		}
	
	public void runServer(){
		try{
			while(true){
				Socket client = server.accept();
				String hostName = client.getInetAddress().getHostName();
				ChatHandler cl = new ChatHandler(client, hostName);
				synchronized(clients){
					clients.add(cl);
					cl.start();
					if(clients.size() == 1){
						cl.send(MASTER, "Willkommen, du bist hier ganz allein^^!");
					}
						else{
							cl.send(MASTER, "Willkommen, außer dir sind hier " +  clients.size()+ " User online!");
						}
				}
			}
		} catch(IOException e){System.out.println("Fehler in der run: " + e);}
	}
		
	protected class ChatHandler extends Thread{
		protected Socket clientSock;
		protected BufferedReader is;
		protected PrintWriter pw;
		protected String clientIP;
		protected String login;
		
		public ChatHandler (Socket sock, String clnt) throws IOException {
			clientSock = sock;
			clientIP = clnt;
			is = new BufferedReader(new InputStreamReader(sock.getInputStream()));
			pw = new PrintWriter(sock.getOutputStream());
			send(MASTER, "wir sind hier");
		}
		
		
		public void run(){
			String line;
			
			try{
				while((line = is.readLine()) != null){
					//Testblock
					String check = line.substring(0,6);
					
					if(check == "CMD_Li"){
						line = line.replace("CMD_Li", "");
						login = line;
						broadcast(MASTER, login + " hat sich eingelogt!");
					}
					
					if(check == "CMD_MG"){
						line = line.replace("CMD_MG", "");
						if (login == null){
							send(MASTER, " Bitte zuerst einloggen");
						}
						else{
							String recip =  line.substring(0, 15);
							String mesg = line.substring(16);
							ChatHandler cl = lookup(recip);
							if(cl == null)
								psend(MASTER, recip + " nicht eingeloggt.");
							else
								cl.psend(login, mesg);
						}
					}
					
					if(check ==  "CMD_QT"){
						broadcast(MASTER, "Bis Bald" + login + "@" + clientIP);
						close();
					}
					
					if(check == "CMD_BC"){
						if(login != null)
							broadcast(login, line);
					}
					
					if(check != "CMD_BC" && check != "CMD_QT" && check !="CMD_Li" && check != "CMD_MG"){
						broadcast(MASTER, "Unbekannter Befehl von: " + login + "@" + clientIP);
					}
					
					//ende Testblock __________________
					
				}
			} catch(IOException e){broadcast(MASTER, "Server hat unbehandeltes Problem festgestellt!! (59)");} 
		
		finally {
			synchronized(clients){
				clients.remove(this);
				if (clients.size() == 1){
					ChatHandler last = (ChatHandler)clients.get(0);
					last.send(MASTER, "Du bist schon wieder alleine, mach dir nix drauß, ich bin auch noch da :)");
					}
				}
			} 
		
		}
		
		protected void close(){
			if(clientSock == null){
				return;
			}
			try{
				clientSock.close();
				clientSock = null;
			}catch(IOException e){System.out.println("Fehler beim schließen des Servers " + e);}
		}
		
		public void send(String sender, String mesg){
			System.out.println("gesendet!");
			pw.println(sender + SEP + mesg);
		}
		
		protected void psend(String sender, String msg){
			send("<* " + sender + " *>", msg);
		}
		
		public void broadcast(String sender, String mesg){
			for ( int i=0; i<clients.size(); i++){
				ChatHandler sib = (ChatHandler)clients.get(i);
				sib.send(sender, mesg);
			}
		}
		
		protected ChatHandler lookup(String nick){
			synchronized(clients){
				for (int i = 0; i<clients.size(); i++){
					ChatHandler cl = (ChatHandler)clients.get(i);
					if(cl.login.equals(nick));
					return cl;
				}
			}
			return null;
		}
		
		public String toString(){
			return "ChatHandler[" + login + "]";
		}
		
	}
	
	public static void main(String[] args){
		Server w = new Server();
		w.runServer();
	}

Momentan soll nur das normale senden gehen

hier der client (noch nicht viel da, nur zu testzwecken)

Java:
import java.io.*;
import java.net.*;

public class Client {

	BufferedReader br;
	BufferedWriter bw;
	
	Client() throws IOException {
		
		try{
			//Socket für Verbindung zu Server erstellen
			Socket server = new Socket ("localhost", 5554);
			System.out.println("Mit Server verbunden: "+server.getInetAddress());
						
			InputStream input = server.getInputStream();
			br = new BufferedReader(new InputStreamReader(input));
			OutputStream out = server.getOutputStream();
			bw = new BufferedWriter(new OutputStreamWriter(out));
			bw.write("CMD_BChallo");
		}	
		catch(IOException error){
			System.out.println("Fehler*1*: "+error);
		}
		
		new Thread(new Runnable(){
			public void run(){
				String s;
				try{
					while ((s = br.readLine())!= null){
						System.out.println("ist da");
						System.out.println(s + "\n");
						return;
				} 
				}catch(IOException e){System.out.println("Fehler: " + e);}
			}
		}).start();
		


	
	}
	
	public static void main(String[] args) throws IOException{
		Client client = new Client();
	}
}

Mein Problem: server scheint zwar was zu senden, aber client nimmt nix an, woran liegt das?

MfG darkeye
 

Marco13

Top Contributor
In der send ein
Code:
        public void send(String sender, String mesg){
            System.out.println("gesendet!");
            pw.println(sender + SEP + mesg);
            [b]pw.flush();[/b]
        }
scheint zu helfen.
 

darkeye2

Bekanntes Mitglied
da ist noch ein fehler drin, bei der classe broadcast kommt wenn man die clients durchgeht null raus, egal wie viele man anmeldet ...
 

darkeye2

Bekanntes Mitglied
Hmm, eigentlich wird doch am anfang beim starten des threads der in die liste eingetragen, doch wenn ich versuche diesen dann diesen thread aus der liste aufzurufen und auf eine variable daraus zuzugreifen, kriege ich irgendwie nix... (die methode broadcast sollte die nachricht an alle clienten verschicken)
 

Marco13

Top Contributor
Bin grad kurz angebunden, aber was passiert denn bei
clients.add(cl);
System.out.println("List now: "+clients);
(ggf. auch noch eine Ausgabe dort, wo du durch die Liste laufen willst, und dann vergleichen)
 

darkeye2

Bekanntes Mitglied
dan kommt sowas hier:
[ChatHandler[null]]
und wenn ich dann den namen anfordere, also sowas:
clients.get(0).getName();
kommt : Thread - 0 , ...
aber ich versehe net ganz, was mir diese null in den klamern hinter den classennamen des threads sagen soll, und wieso alle variablen des threads dann den wert null haben ...
 

darkeye2

Bekanntes Mitglied
Also nach dem ich sogut wie überral mal System.out.println() eingebaut hab, hab ich paar kleine fehler behoben, serveranwendung scheint nun alles richtig zu versenden, also liegts am clienten, was ist hier falsch:
Java:
public class Client {

	protected BufferedReader br;
	protected  PrintWriter pw;
	protected Socket server;
	public Interface iface;
	
	Client() throws IOException {
		
		try{
			//Socket für Verbindung zu Server erstellen
			server = new Socket ("localhost", 5554);
			iface = new Interface();
			iface.tfield.append("Mit Server verbunden: "+server.getInetAddress() + "\n");
						
			InputStream input = server.getInputStream();
			br = new BufferedReader(new InputStreamReader(input));
			pw = new PrintWriter(server.getOutputStream());
			send("CMD_Lidarkeye");
			send("CMD_BChallo");
		}	
		catch(IOException error){
			System.out.println("Fehler*1*: "+error);
		}
		
		new Thread(new Runnable(){
			public void run(){
				String s;
				try{
					while ((s = br.readLine())!= null){
						iface.tfield.append(s + "\n");
						return;
				} 
				}catch(IOException e){System.out.println("Fehler: " + e);}
			}
		}).start();
	
	}
	
	
	public void send(String  msg){
		pw.println(msg);
		pw.flush();
		
	}
	
	
	public static void main(String[] args) throws IOException{
		Client client = new Client();
	}
}
anscheinend wird nur die erste ankommende nachricht als solche erkannt, danach kommt nix mehr an, obwohl verbidnung steht, und der server was schickt, liegt wohl an der ausgabemethode . ..
 

darkeye2

Bekanntes Mitglied
also ich glaube, ich habe den fehler gefunden, jetzt noch eine etwas andere frage, wenn ich mit einen JEditorPane arbeite, und jetzt html text hinzufügen will, wie soll ich das machen, wenn ich einfach nen text an den bestehenden anhänge siehts momentan so aus: <b>mein text</b> gibts da irgendwelche methoden, oder wie soll man das machen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Lottospielen mit System, Versuch 2, noch umständlicher als vorher Allgemeine Java-Themen 1
B Exception bei einem Decrypt versuch. Allgemeine Java-Themen 4
M Letzter Versuch zum ändern Allgemeine Java-Themen 3
N NoSuchMethodException bei Reflection-Versuch, aber warum? Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
E Server Client Audio Allgemeine Java-Themen 6
E Server Client Audio Allgemeine Java-Themen 0
Jose05 Speicherung auf einem Server Allgemeine Java-Themen 1
D Live-Scripting im Server Allgemeine Java-Themen 6
Monokuma Threadproblem mit Sockets und Server Allgemeine Java-Themen 7
T imagej-server NullPointerException Allgemeine Java-Themen 1
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
C Java RMI Client - Server Allgemeine Java-Themen 0
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
M TomEE auf Windows Server 2016 installieren Allgemeine Java-Themen 4
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
J Java - hoher Ramverbraucht auf WTS Server Allgemeine Java-Themen 8
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
C Logfile upload zu einem externen filezilla sftp server Allgemeine Java-Themen 6
S Simples Client Server Setup in Java Allgemeine Java-Themen 4
K Server mieten, Berechnungen darauf ausführen Allgemeine Java-Themen 14
Anfänger2011 Java Server oder lieber was anderes Allgemeine Java-Themen 16
F Best Practice Server und Clients Allgemeine Java-Themen 10
E JavaFX RMI extrem langsam wenn Server nicht läuft Allgemeine Java-Themen 5
D Best Practice Java Application Server , Docker oder was? Allgemeine Java-Themen 15
L Suche nach CalDav Server API Allgemeine Java-Themen 0
C Hang Man Server Client Allgemeine Java-Themen 3
C Hang man mit Server/Client Allgemeine Java-Themen 2
K Classpath JDBC Driver auf Server Allgemeine Java-Themen 4
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
I Installer, der JAVA EE Server und DB installiert Allgemeine Java-Themen 10
M Kapselung JasperReports Server und Java Allgemeine Java-Themen 5
P Java Fehler auf Win2008 Server java.io.FilePermission IE8 Version JRE 1.7.0_51 Allgemeine Java-Themen 7
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
C Mit Pc Awendungen auf Server starten Allgemeine Java-Themen 8
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
E Socket Client-Server-Programmierung Allgemeine Java-Themen 44
T Java Streaming-Server & Streaming-Client Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
D Client / Server Allgemeine Java-Themen 23
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
U AWT simulierter Tastendruck auf Virtual Server Allgemeine Java-Themen 7
Z Socket [Chatprogramm] Nachrichten vom Server anzeigen lassen Allgemeine Java-Themen 6
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
N COM Server ansteuern / KISSsoft Allgemeine Java-Themen 3
N URLConnection - Server abgeschaltet Allgemeine Java-Themen 2
A Parser verursacht Speicherprobleme auf Server Allgemeine Java-Themen 2
T Mit Java auf Dateien zugreifen die auf einem Server liegen Allgemeine Java-Themen 5
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J Application Server Allgemeine Java-Themen 2
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
C game-server GUI erstellen Allgemeine Java-Themen 13
Developer_X Java FTP - Ordner auf Server erstellen Allgemeine Java-Themen 7
C Java Server Pages Problem Allgemeine Java-Themen 6
T Gleichzeitige Zugriffe auf Daten auf dem Server Allgemeine Java-Themen 11
M Server-Responds testen, Code-Redundanz Allgemeine Java-Themen 3
T JPA Entity im Client-Server-Umfeld Allgemeine Java-Themen 19
C Primzahlen Server Allgemeine Java-Themen 3
K Server Daten Visualisieren Allgemeine Java-Themen 3
S FTP Gezippte Datei von FTP Server downloaden Allgemeine Java-Themen 24
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
B verbindung mit exchange server Allgemeine Java-Themen 3
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
M Frage zum Auslesen einer Datei auf nem Server Allgemeine Java-Themen 4
ruutaiokwu MS Exchange Server 2003 Daten auslesen Allgemeine Java-Themen 2
T Welcher Server? JSP und Client-Anwendung Allgemeine Java-Themen 4
Final_Striker Datei vom Server bekommen Allgemeine Java-Themen 2
H Server Threaded machen. Port-Problem Frage Allgemeine Java-Themen 2
W programm auf server Allgemeine Java-Themen 5
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
MQue Server- Thread Client Allgemeine Java-Themen 2
N Daten auf Server kopieren Allgemeine Java-Themen 6
S Datei auf Server mit lokaler Datei vergleichen Allgemeine Java-Themen 4
J J2EE Server für EJB Container Allgemeine Java-Themen 8
D design client server Allgemeine Java-Themen 10
I Persistenz ohne App-Server? Allgemeine Java-Themen 6
O binärer Suchbaum mit client server., objekte speichern. Allgemeine Java-Themen 2
0 kein Java unter Server 2008 ? Allgemeine Java-Themen 3
G Proxy- Server setzen Allgemeine Java-Themen 2
G Preise am Server verändern Allgemeine Java-Themen 4
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
MQue FTP Server/ Datei ablegen Allgemeine Java-Themen 4
F Java Server VM/ Client VM Allgemeine Java-Themen 7
J java + rmi + not found in gnu.java.rmi.server Allgemeine Java-Themen 7
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
A Client/Server-Anwendung Allgemeine Java-Themen 3
P Server für Java- Programme Allgemeine Java-Themen 8
S SERVER.XML Allgemeine Java-Themen 3
G Gelöst: ZIP File vom FTP Server entpacken Allgemeine Java-Themen 3
T Proxys: Idee für den Callback vom Server zum Client? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben