Chatprogramm - Server funktioniert nicht

K

k.west

Gast
Hi,
ich hab versucht einen einfachen Chat nur zwischen zwei Computern (im Heimnetzwerk) zu programmieren. Deshalb habe ich dem "Serverteil" des Programms mithilfe Runnable einen Thread zugewiesen (soll ja immer empfangen).
Wenn ich das Programm auf beiden Computern starte, funktioniert zunächst auch alles super (Verbindung kann aufgebaut werden usw.), wenn ich aber was in den Chat schreibe, wird es nur beim "Absender" angezeigt.

Java:
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

	
public class MaxChat extends JFrame implements Runnable
{
	JTextArea chat;
	JTextField eingabe;
	Thread empfang;
	Socket s;
	ServerSocket server;
	
	MaxChat(String titel)
	{
		super(titel);
		chat=new JTextArea(500, 100);
		chat.setEditable(false);
		eingabe=new JTextField(200);
		Box box=Box.createVerticalBox();
		box.add(chat);
		box.add(eingabe);
		add(box);
		
		try
		{
			server=new ServerSocket(1234);
			empfang=new Thread(this);
			empfang.start();
			s=new Socket(InetAddress.getByName("Joachim").getHostAddress(), 1234);
		}
		catch(Exception e)
		{
			System.err.println(e);
		}
		
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		eingabe.addKeyListener(new KeyLauscher());
	}
	
	class KeyLauscher extends KeyAdapter
	{
		public void keyPressed(KeyEvent e)
		{
			if(e.getKeyCode()==KeyEvent.VK_ENTER)
			{
				if(eingabe.getText()!=null)
				{
					try
					{
						s=new Socket(InetAddress.getByName("Joachim").getHostAddress(), 1234);
						PrintWriter ausgabe=new PrintWriter(s.getOutputStream());
						ausgabe.write(eingabe.getText()+"\n");
						ausgabe.flush();
						ausgabe.close();
						chat.append("\nGonzo: "+eingabe.getText());
						eingabe.setText("");
					}
					catch(Exception i)
					{
						System.err.println(i);
					}
				}
			}
		}
	}
					
	public void run()
	{
		try
		{
			Socket accept=server.accept();
			InputStream input=accept.getInputStream();
			BufferedReader r=new BufferedReader(new InputStreamReader(input));
		
			while(true)
			{
				String eingabe=r.readLine();
				if(eingabe!=null)
				{
					chat.append("\nJoachim: "+eingabe);
				}
			}
		}
		catch(Exception e)
		{
			System.err.println(e);
		}
	}
	
	public static void main(String[] args)
	{
		MaxChat fenster=new MaxChat("MaxChat");
		fenster.pack();
		fenster.setVisible(true);
	}
}

Habs auch schon mit zwei parallelen Threads für "Server-" und "Clientteil" meines Programms versucht, ist aber genau dasselbe rausgekommen.

Bin auf dem Gebiet noch ziemlicher Anfänger, kann also sein, dass das hier totaler Müll ist. :D
 
K

k.west

Gast
Ach ja, noch zum besseren Verständnis: "Joachim" und "Gonzo" sind die Namen meiner beiden Computer. :)
 
T

trääät

Gast
1) Server und Client sollte grundsätzlich zwei völlig getrennte programme sein ...
einen server in eine app einzubauen hat nur bei bestimmten aufgaben sinn

2) verwende direkt IP-adressen anstatt die windows-namens-auflösung ... die kann auch daneben gehen ... server sollten eh immer feste IPs haben

3) nutze bitte google und die sufu ... denn es gibt gut tutorials zum thema netzwerkprogrammierung und chats ...
 
K

k.west

Gast
Okay, dann versuch ichs vielleicht mal mit einer Trennung von Server und Client. Kannst du mir vielleicht erklären, wieso das nötig ist?
Die IP-Adressen hab ich jetzt mal nur zum Test mit der Windows-Namenauflösung verwendet, weil ich keinen Server habe und ich es noch nicht geschafft habe, meine Computer-IP ohne Probleme auf statisch umzustellen.
 
T

tröööt

Gast
na das geht ja gut los ... aber jeder anfang ist schwer ...

server und client sollten in der regel getrennt sein weil sie völlig andere aufgaben haben ...

die server-anwendung z.b. läuft in der regel als system-dienst im hintergrund und sollte so stabil programmiert sein das es auch bei fehlern zu keinem schweren absturz führt

der client dagegen hat in der regel nur die aufgabe eingaben vom user zum server zu senden und dessen antworten darzustellen ...
schmiert der client aus irgendeinem grund ab ist eigentlich egal wie man drauf reagiert ... aber man darf dabei den server nicht mitreißen ... das ist schon einer der hauptgründe für die trennung

ein anderer grund ist natürlich das der server in der regel auf einem zentral im netz erreichbaren rechner läuft ... einem rechner ohne graphische oberfläche ... hier könnte man also eine GUI-software gar nicht nutzen ...


das mit "server sollten feste IPs haben" hast du etwas missverstanden ... ich meinte damit keinen "server" im netz ... sondern lediglich die server-software und den rechner auf dem diese läuft ...
auch in einem LAN sollte für solche dinge fest IPs eingestellt werden ...

in der regel geht das recht easy ...
man schaut in den aktuellen status der verbindung und trägt diese einfach bei static ein ...
wenn zusätzlich ein DHCP läuft ist zu empfehlen außerhalb dessen range zu arbeiten ... also wenn der DHCP z.b. zwischen 192.168.0.100 und 192.168.0.200 arbeitet am besten irgendwas unter 100 oder über 200 wählen ... so läuft man nicht gefahr eine IP zu nutzen die der DHCP an eine andere maschine vergeben hat ...

natürlich muss man drauf achten wo sich der rechner "bewegt" ...
wenn man mit nem laptop viel unterwegs ist und sich in verschiedene hotspots einklinkt muss man natürlich jedes mal die automatik wieder einschalten oder andere vorgaben nutzen ...
steht der große schwere tower aber wirklich nur zu hause ist das ja völlig egal ...

wichtig ist natürlich das man auch ein LAN nutzt ... also richtung internet mindestens einen router zwischen hat ...

[ot]mir ist es leider von mehreren anbietern bekannt das diese ihre gerät nur als modem konfigurieren obwohl diese router-eigenschaften nutzen und sich 2 oder mehr user GLEICHZEITIG über EIN dsl-konto einwählen können ...
nur weil dann physisch beide maschinen in einem LAN wären (wenn das gerät richtig eingestellt wäre) sind diese es aber logisch noch lange nicht ...
dies betrifft leider nicht nur einen doch sehr populären anbieter sondern ist eigentlich bei allen möglich die entsprechende geräte an ihre kunden ausliefern die falsch konfiguriert sind ...

sollte man also ein gerät haben was eben KEIN LAN bildet sondern nur ein modem ist hilft nur der kauf eines handelsüblichen routers ... diese sind dann in der regel recht gut vorkonfiguriert ... kostenpunkt im notfall ca 20€ ...[/ot]

ansonsten ist netzwerkprogrammierung mit java recht einfach ... alles notwendige kommt mit ... man muss halt nur etwas allgemeinwissen über netzwerke haben
 
K

k.west

Gast
Danke, super Antworten und das Chatprogramm läuft jetzt auch! :)
Danke für die Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Socket [Chatprogramm] Mehrere Clients an einen Server Netzwerkprogrammierung 10
Y UDP Chatprogramm auf Client/Server Basis Netzwerkprogrammierung 5
J Chatprogramm Netzwerkprogrammierung 25
D Chatprogramm zwischen zwei ChatClients (aktiv/passiv) Netzwerkprogrammierung 1
S User im Chatprogramm verschiedene Farben Netzwerkprogrammierung 1
S Java-Chatprogramm via Console Netzwerkprogrammierung 4
A Chatprogramm: Connection refused Netzwerkprogrammierung 4
eQui Hilfe bei Chatprogramm Netzwerkprogrammierung 3
J Brauche hilfe bei Projekt: Netzwerk Chatprogramm Netzwerkprogrammierung 12
T FTP Chatprogramm probleme Netzwerkprogrammierung 2
J Chatprogramm Netzwerkprogrammierung 9
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
L30nS RMI RMI-Server kann Dialog nicht volkommen anzeigen Netzwerkprogrammierung 2
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
F NodeJs-Server auf Firebase hosten ? Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
H HTTP Glassfish (v5) Application Server - Bibliothek zur Verfügung stellen Netzwerkprogrammierung 4
B HttpClient - Server (Jetty) - getInputStream - EOF Netzwerkprogrammierung 3
P TCP-Server Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
F Server für Java Applikationen Netzwerkprogrammierung 16
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
G Server-Client IO Problem Netzwerkprogrammierung 6
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
T Jetty Server LOGGING Netzwerkprogrammierung 1
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
S Spiel mit Server programmieren Netzwerkprogrammierung 2
N Post u Head Request an Server Netzwerkprogrammierung 4
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
J Socket Tutorial zu Multiplayer Server schreiben? Netzwerkprogrammierung 5
S Java Chat Server Netzwerkprogrammierung 8
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
KaffeeFan Programmierung mit Cloud-Server Netzwerkprogrammierung 0
L Socket Problem mit Server Netzwerkprogrammierung 1
cezary Socket Paralleler Server ? Netzwerkprogrammierung 1
I Socket Leicht zu DDosender Server Netzwerkprogrammierung 4
agent47 HTTPs Server Netzwerkprogrammierung 5
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
J Prüfen, ob remote UDT Server erreichbar ist Netzwerkprogrammierung 0
P Server als Client nutzen Netzwerkprogrammierung 8
S Server Kommunikation Netzwerkprogrammierung 1
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
S Webservice - Server Netzwerkprogrammierung 0
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben