Socket Einfache Client/Server-Anwendung

Serbel

Mitglied
Hallo Leute,
Ich habe gerade erst begonnen mich mit der Client Server Programmierung zu beschäftigen und bin deshalb noch ein Anfänger in diesem Bereich. Ich wollte einfach mal eine ganz kleine Client-Server-Anwendung programmieren. Der Server soll lediglich einen Text zum Client schicken und der Client soll diesen Text einfach lesen uns ausgeben. Jedoch funktioniert das nicht so ganz. Hier ist mal der Quellcode für den Client und den Server

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


public class Server {
	public static void main(String[] args) {
		try {
			int port = Integer.parseInt(args[0]); // Kann eine ArrayIndexOutOfBound Exception werfen, aber auch eine NumberForamtException--> Beide Exceptions müssen aber nicht gefangen werden--> Unchecked Exceptions
			ServerSocket socket = new ServerSocket(port); // Kann eine IO Exception werfen, die gefangen werden muss --> Ist eine checkedException
			Socket s = socket.accept();
			System.out.println("Server gestartet");

			BufferedWriter zumClient = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			BufferedReader vomClient = new BufferedReader(new InputStreamReader(s.getInputStream()));

			zumClient.write("Hallo Client, ich bin der Server");
		} catch (ArrayIndexOutOfBoundsException a) {
			System.out.println("ArrayIndexOutOfBoundsException");
		} catch (NumberFormatException n) {
			System.out.println("NumberFormatException");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Und der Client
Java:
import java.io.*;
import java.net.*;


public class Client {
	public static void main(String[] args) {
		try {
			int port = Integer.parseInt(args[0]);
			Socket clientSocket = new Socket("localhost", port); // Kann eine UnknownHostExceptionWerfen, die ABGEFANGEN werden muss --> CheckedException
																 // Kann aber auch eine IOException werden, die abgefangen werden muss

			BufferedWriter zumServer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
			BufferedReader vomServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

			System.out.println(vomServer.readLine());
		}
		catch (ArrayIndexOutOfBoundsException a) {
			System.out.println("ArrayIndexOutOfBoundsException");
		} catch (UnknownHostException u) {
			System.out.println("Unbekannter Host");
		} catch (IOException e) {
			System.out.println("IOException");
		}
	}
}

Wenn ich das Programm mit dem Kommandozeilenparameter z.b. 2222 (für einen benutzbaren Port) aufrufe, dann bekommen ich beim Server, sobald der Client sich angemeldet hat, die Nachricht "Server gestartet" danach tut sich gar nichts mehr. Beim Client bekomme ich eine IOException.

Kann mir jemand erklären, was ich falsch mache?
 

Michael...

Top Contributor
nach dem write ein flush() auf den Stream aufrufen.
Grundsätzlich sollte man nicht nur ausgeben, dass eine Exception geworfen wurde.
Code:
e.printStackTrace();
wie beim Server, gibt deutlich mehr Aufschluss über den Fehler.
 

bERt0r

Top Contributor
Vielleicht hilft flush, auf jeden Fall benötigst du aber sowohl bei deinen Streams, als auch deinen sockets ein close(). Du musst Streams immer schließen, sonst kannst du dir nie sicher sein, dass alle Daten auch wirklich geschrieben wurden.
 
S

SlaterB

Gast
pff, man kann doch wohl eine TCP-Verbindung länger als 1 sec offen halten und auch ohne close() erwarten und sich sicher sein, dass die Daten gesendet werden ;)
 

Serbel

Mitglied
Das mit dem flush() ändert leider überhaupt nichts. Wenn ich den Server und den Client starte, so bekomme ich beim Client eine IOException
 
S

SlaterB

Gast
vielleicht hilft die angesprochene Ausgabe der IOException,
ansonsten dürfte nichts zu sehen sein, bei jedem anderen läuft das Programm (also testen kann ich nur bei mir ;), geht)

dass der Server nur Nanosekunden nach dem Senden schon aufhört kann evtl. Probleme machen, rate ich jetzt mal,
hilft es wenn der Server bisschen wartet mit Thread.sleep()?

damit die Nachricht auch gut übertragen wird, verwende lieber
Java:
zumClient.write("Hallo Client, ich bin der Server\n"); // ohne Zeilenumbruch geht kein readLine()
zumClient.flush(); // sonst evtl. erst bei Socket-Ende oder gar nicht gesendet? bleibt im Buffer
 

Serbel

Mitglied
Hi
Mit den Befehlen:
zumClient.write("Hallo Client, ich bin der Server\n");
zumClient.flush();
Funktioniert das Programm. Kann mir jemand erklären, warum ich:
- einen Zeilenumbruch verwenden muss
- flush() verwenden muss
 
G

Gast2

Gast
- einen Zeilenumbruch verwenden muss
weil Du beim Client einen Zeilenumbruch erwartest
Code:
System.out.println(vomServer.readLine());
daher musst Du auch einen Zeilenumbruch senden

- flush() verwenden muss
Du verwendest Streams um es einfacher zu haben
Code:
BufferedWriter zumClient = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
aber Streams werden gepuffert (zumindest die Ausgabe) um effizienter zu arbeiten

hand, mogel
 
G

Gast2

Gast
Schließe doch einfach deine Streams und Sockets wenn du fertig bist mit senden, dann funktionierts auch.
das funktioniert auch nur für diesen Fall ... sowie mehr als nur ein String von A nach B gesendet werden soll, wirds schwierig - weil ständig die Verbindung neu aufgebaut werden muss

hand, mogel
 

Dit_

Bekanntes Mitglied
vielleicht brauchst du noch eine Schleife
Code:
while((line = bufferedReader.readLine())!= null)
?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HTTP Einfache Restanfrage Netzwerkprogrammierung 4
F Einfache Socket Verbindung Netzwerkprogrammierung 2
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
Y einfache TCP/IP Anwendung Netzwerkprogrammierung 4
S Einfache Server Frage Netzwerkprogrammierung 5
E einfache Frage: wie Fehler untersuchen mit Tomcat Netzwerkprogrammierung 5
E Einfache Frage zu servlets und netbeans 6.5 Netzwerkprogrammierung 41
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
G einfache Frage zu ServerSocket ... Netzwerkprogrammierung 5
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten 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
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur 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
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
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
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
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
J Client - Serversocket Netzwerkprogrammierung 1
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
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
D Socket UDP Client reagiert nicht auf spontane Meldungen Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben