Socket SocketServer und Client machen Probleme

Hallo Leute,
ich sitze an einer Aufgabe für die Uni - es geht um einen SocketServer und einen Client.
Der Client soll nach Verbindung Bestellungen aufgeben können (4 stellige Zahl) und an den Server schicken.
Der Server soll die Zahl prüfen und einen entsprechenden Code zurückgeben.

Leider scheint meine Zahl nicht an den Server geschickt zu werden - ich finde leider das Problem nicht - vielleicht wäre einer von euch so freundlich und schaut drüber, ob er die Problemstelle ausfindig macht.

Client:
Java:
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
	Socket requestSocket;
	InputStreamReader isr;
	BufferedReader br;
	BufferedOutputStream bos;
	int port = 4444;
	String ip;
	String order;

	public Client(String ip) {
		this.ip = ip;
	}

	public void run() {
		System.out.println("New client created");
		try {
			requestSocket = new Socket(ip, port);
			bos = new BufferedOutputStream(requestSocket.getOutputStream());
			isr = new InputStreamReader(requestSocket.getInputStream(), "UTF-8");
			br = new BufferedReader(isr);
			while (true) {
				String line = null;
				while ((line = br.readLine()) != null) {
					handleMessage(line);
				}
				if (line == null) {
					System.out.println("Disconnected..");
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				bos.close();
				isr.close();
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		Client c = new Client("localhost");
		c.run();
	}

	private void getOrderFromUser() {
		BufferedReader bin = new BufferedReader(
				new InputStreamReader(System.in));
		System.out.print("Please input the order's number: ");
		try {
			order = bin.readLine();
			bos.write(order.getBytes());
			bos.flush();
			System.out.println("Order sent to Server");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void handleMessage(String line) {
		if (line.equals("Connection established")) {
			System.out.println(line);
			this.getOrderFromUser();
		}
		if (line.equals("444")) {
			System.out.println("Order accepted");
		} else if (line.equals("450")) {
			System.out.println("Order declined");
		} else if (line.equals("511")) {
			System.out.println("Damn my IP got banned :(");
		}
	}
}

Server:
Java:
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server {
	public static boolean isReady = false;
	int port;
	ServerSocket server;
	Socket client;
	byte[] receivedData;
	BufferedOutputStream bos;
	InputStream is;
	BufferedReader br;
	String line;
	final String DECLINED = "511";
	final String FAIL = "450";
	final String OK = "444";
	int failcount = 0;
	ArrayList<InetAddress> bannedClients;
	InetAddress currentClientIP;

	public String getRemoteAddress() {
		return server.getInetAddress() + "";
	}

	public static void main(String[] args) throws IOException {
		new Server().startServer();
	}

	public Server() throws IOException {
		bannedClients = new ArrayList<InetAddress>();
		server = new ServerSocket(4444);
		System.out.println("New server created with port 4444");
	}

	public void startServer() {
		while (true) {
			client = null;
			try {
				client = server.accept();
				if (client != null) {
					System.out.println("New client connected");
					handleConnection(client);
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (client != null)
					try {
						client.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
			}
		}
	}

	private void handleConnection(Socket client) throws IOException {
		System.out.println("handle Connection");
		bos = new BufferedOutputStream(client.getOutputStream());
		bos.write("Connection established".getBytes("UTF-8"));
		br = new BufferedReader(new InputStreamReader(client.getInputStream(),
				"UTF-8"));
		while ((line = br.readLine()) != null) {
			System.out.println("Order: " + line);
			if (bannedClients.contains(currentClientIP)) {
				bos.write(DECLINED.getBytes("UTF-8"));
			} else {
				if (handleMessageFromClient(line)) {
					bos.write(OK.getBytes("UTF-8"));
				} else {
					failcount++;
					if (failcount < 3) {
						bos.write(FAIL.getBytes("UTF-8"));
						System.out.println("Wrong Order from Client");
					} else if (failcount == 3) {
						System.out
								.println("3 wrong Orders from Client - will bann him");
						bos.write(DECLINED.getBytes("UTF-8"));
						bannedClients.add(currentClientIP);
						failcount = 0;
					}
				}
			}
		}
	}

	protected boolean handleMessageFromClient(String line) {
		if (line.length() == 4) {
			try {
				Integer.parseInt(line);
			} catch (NumberFormatException e) {
				System.out.println("No regular number");
				return false;
			}
			return true;
		} else {
			return false;
		}
	}
}

Vielen Dank für die Hilfe und ein schönes Wochenende noch,
Tim
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Zeile 73 im Client ist auskommentiert. Ich glaub der frägt nichtmal nach einer Eingabe die er dem Server schicken könnte?!

- Alex
 
Tut mir Leid, ist nur noch auskommentiert gewesen, um etwas zu testen.
Auch wenn es nicht auskommentiert ist, gibt es einen Fehler.

Im handleConnection Bereich bricht er ab, wenn ich den BufferedReader nutze, warum auch immer.

Tim
 

Michael...

Top Contributor
Was heisst, er bricht ab?
Macht er etwas unerwartetes oder kommt es zu einer Exception? Was macht er denn bzw. wie schaut die Exception aus?
 
Der Server liest die Order einfach nicht und der Client das "Connection established" ebenfalls nicht.
Gibt es einen logischen Fehler bei meinen BufferedReadern auf beiden Seiten?

Tim
 

Michael...

Top Contributor
So hab's mir mal genauer angeschaut. Ursache:
Der Client wartet auf den Abschluss einer Nachricht vom Server und gleichtzeitig wartet der Server auf eine Nachricht vom Client... und wenn sie nicht gestorben sind, dann...
--> Es fehlt quasi das "Over", das das Ende der Nachricht markiert ;-)

Momentan baut der Client eine Verdingung zum Server auf und versucht per BufferdReader von dessen InputStream zu lesen. --> readLine() blockiert solange bis ein Zeilenumbruch vom InputStream gelesen wurde

Auf der anderen Seite erhält der Server eine Verbindungsanfrage vom Client. Er baut eine Verbindung auf und sendet etwas via OutputStream an den Client. Allerdings sendet er ohne die Nachricht mit einem Zeilenumbruch abzuschliessen.
Mit folgender Änderung im Servercode, würdest Du schon mal einen Schritt weiterkommen:
[JAVA=67]bos.write("Connection established\n".getBytes("UTF-8"));[/code]

Generell fehlt bei Dir grundsätzlich der Zeilenumbruch am Ende einer "Nachricht". Wenn Du das korrigierst solltest Du schon ein ganzes Stück weiter kommen.

Üblicher Weise lagert man, das Lesen von den InputStreams im Client und im Server in separate Threads aus. Im Server wird das spätestens dann notwendig, wenn eine Kommunikation zu mehreren Clients aufrecht erhalten werden soll.
 
Hallo Michael,
Vielen Dank für deine Hilfe - ich Idiot habe natürlich komplett \n ignoriert.
Ich werde das Ganze jetzt mal abändern und hoffe, dass es dann flutscht ;)

EDIT: Eben abgeändert - läuft jetzt perfekt.

Vielen Dank für die Hilfe!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
DamienX Chat Socketserver/Client. wo ist das Problem? Netzwerkprogrammierung 2
P SocketServer im lokalen netzwerk suchen Netzwerkprogrammierung 2
F SocketServer Problem Netzwerkprogrammierung 8
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
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben