Warum kann ich kein Socket aufbauen?

publicmain

Mitglied
Stimmt. Entschuldige, "es funktioniert nicht" ist wirklich ein blöder Einwurf.

Ich habe gerade das hier programmiert:
Galileo Computing :: Java ist auch eine Insel – 21.7 Client-Server-Kommunikation

Eine Fehlermeldung kann ich leider nicht liefern, weil es keine gibt.
Es funktioniert einfach nicht.

Ich möchte einen Server und einen Client machen. Der Client soll dem Server 2 Zahlen in Strings senden, dieser multipliziert beide Zahlen und sendet sie dem Client zurück. Der Client gibt das Ergebnis dann über die Konsole aus. Ich habe also 2 Anwendungen gestartet. Aber auf der Konsole des Clients taucht einfach nichts auf. Ich weiß auch nicht wo ich einen Fehler suchen soll. Ich bin in dieser Hinsicht leider sehr unerfahren.

Würde mich über Hilfen echt freuen!

Danke!
 
Zuletzt bearbeitet:

publicmain

Mitglied
Also zuerst starte ich den Server:

Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;




public class Galileo21_7MulServer {
	
	private static void handleConnection (Socket client) throws IOException {	
		Scanner in = new Scanner ( client.getInputStream() );
		PrintWriter out = new PrintWriter ( client.getOutputStream(), true );
		String factor1 = in.nextLine();
		String factor2 = in.nextLine();
		out.println ( new BigInteger(factor1).multiply( new BigInteger(factor2) ) );
	}
	
	public static void main (String[] args) throws IOException {
		ServerSocket server = new ServerSocket( 3143 );
		server.setSoTimeout(60000);
		while (true) {
			Socket client = null;
			try {
				client = server.accept();
				handleConnection (client);
			}
			catch ( IOException e ) {
				System.out.println( "IOException: " + e );
			}
			finally {
				if ( client != null )
					try { client.close(); } catch ( IOException e) { } 
			}
		}
	}

}


Und danach starte ich den Client:

Java:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;




public class MulClient {
	
	public static void main (String[] args) {
		
		Socket server = null;
		
		try {
			server = new Socket ("localhost", 3143);
			Scanner in = new Scanner ( server.getInputStream() );
			PrintWriter out = new PrintWriter ( server.getOutputStream() );
			
			out.println ("2");
			out.println ("4");
			System.out.println(in.nextLine()); 

			server = new Socket ("localhost", 3143);
			in = new Scanner ( server.getInputStream() );
			out = new PrintWriter ( server.getOutputStream() );
			
			out.println ("23895737895");
			out.println ("434589358935857");
			System.out.println("23895737895 x 434589358935857 = " + in.nextLine()); 
		}
		catch (UnknownHostException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		finally {
			if ( server != null )
				try { server.close(); } catch ( IOException e ) { }
		}
	}

}

Also ganz das Beispiel aus dem OpenBook.

Warum bekomme ich keine Antwort? :(
 
Zuletzt bearbeitet:

HBerger

Mitglied
Kannst Du debuggen ? Da solltest doch sehen was er so macht :)
Zu Java kann ich nicht viel sagen, kann sein das da der eine oder andere Fehler noch drinn ist.

DIe Frage ist, der java.util.scanner blockiert der, bis der Daten bekommt ?
Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.

Since this method continues to search through the input looking for a line separator, it may buffer all of the input searching for the line to skip if no line separators are present.
klingt zumindest nicht danach ...

So hasst du das problem:
- Der server baut listner socket und lauscht
- Der client verbindet sich
- der server reagiert auf den connect, erstellt den neuen client socket und bestaetigt die verbindung ...
bis dahin laeuft noch alles chronologisch, aber nu
- der client sendet die werte
- der server liest sofort auf dem socket

da iss die reihenfolge unbestimmt .... d.h. der Server liest vielleicht aus dem socket, wenn noch keine daten angekommen sind.
wirft der Server eine NoSuchElementException ?

Normal wartet man bis daten an nem Socket ankommen, und arbeitet die in ner Schleife ab ...
und baut ne Abbruch Mechanik rein.
Auf TCP Ebene wirst immer nen Protokoll, so simpel es auch sein mag, bauen muessen, solange du ne communication bauen willst, und nicht nur irgendwas belauschen willst.

Ciao ...
 

publicmain

Mitglied
Hallo HBerger, danke für deine Antwort!

Ich weiß leider nicht, was genau ich debuggen soll.

Aber mal eine Gegenfrage. Das Beispiel ist aus dem OpenBook von Galileo. Warum sollten die Beispiele veröffentlichen, die nicht funktionieren?

Wie man Protokolle bastelt weiß ich leider auch nicht. Im OpenBook steht, dass die Kommunikation bereits von Java gemanaget wird.

Ich bin weiterhin für jede Hilfe dankbar!





Die Funktion
Java:
handleConnection(Socket)
wird noch aufgerufen. Aber bei
Java:
String factor1 = in.nextLine();
bleibt das Programm stehen. :(




An der Firewall liegt es übrigens nicht. Ich habe sie gerade ausgeschaltet und das Ergebnis war gleich.
 
Zuletzt bearbeitet:

Xeonkryptos

Bekanntes Mitglied
Die Funktion
Java:
handleConnection(Socket)
wird noch aufgerufen. Aber bei
Java:
String factor1 = in.nextLine();
bleibt das Programm stehen. :(


Die readXXX()-Methoden der Scanner-Klasse blockieren, bis du eine Eingabe getätigt hast! Gibst du denn etwas in der Konsole ein? Am besten ein
Java:
System.out.print("Eingabe: ");
davor hängen! Dann siehst du, wann du etwas eingeben musst! Vorher wird der Code nicht weiter ausgeführt!
 
Zuletzt bearbeitet:

publicmain

Mitglied
Ich gebe über dem Client folgenden String ein (s.o.):

Java:
PrintWriter out = new PrintWriter ( server.getOutputStream() );
out.println ("2");
out.println ("4");
 

HBerger

Mitglied
ok, wenn er beim lesen blockiert, sollt es wiederum funktionieren ....

An der Firewall liegt es übrigens nicht. Ich habe sie gerade ausgeschaltet und das Ergebnis war gleich.
wenn die firewall das problem waer, wuerde der tcp connect nicht zustande kommen ... das wuerdest du anders merken (Ecxeption) :)

bleibt das Programm stehen.
Also debuggst du schon :bae:

Kannst du am client auch debuggen ?
laeuft der auch ueber das:
Java:
out.println ("23895737895");
out.println ("434589358935857");
drüber ?

notfalls nach dem 2. println mal nen flush machen(keine ahnung wie das in Java geht ^^)
Sollte aber eigentlich nicht das problem sein ... der Socket puffert deine ausgabe zwar, und die menge langt sicher nicht um nen packet sofort abzuschicken. Aber normal sollte er nach zig millisekunden auch von allein abschicken, egal wie gross das packet ist.

Aber mal eine Gegenfrage. Das Beispiel ist aus dem OpenBook von Galileo. Warum sollten die Beispiele veröffentlichen, die nicht funktionieren?
Ich komm aus der C/C++ Ecke und da gibt es Literatur ... :shock:
Da iss sofort verbrennen das beste was man machen kann ... also nicht den Autor ... :bloed:

Bei Galileo iss so ne Sache. gibt paar wenige gute Buecher. richtig falsch sind da auch eher wenige, aber einige sind einfach nurn Abdruck von anderer Dokumentation, mit bissi Prosa zwischendrin.

Ciao ...
 
Zuletzt bearbeitet:

publicmain

Mitglied
Nein, ich debugge nicht. Das Debuggen dauert immer so lange und ich verstehe fast nichts. Ich gebe nach jedem Befehl eine Zahl in der Konsole auf, so dass ich weiß, bis wohin das Programm läuft.


Also der Client führt
Java:
out.println ("4");
aus und bleibt dann vor
Java:
System.out.println(in.nextLine());
stehen.

Der Server führt
Java:
PrintWriter out = new PrintWriter ( client.getOutputStream(), true );
aus und bleibt vor
Java:
String factor1 = in.nextLine();
stehen.

Eigentlich sollte der Server an dieser Stelle die 4 einlesen.
 
Zuletzt bearbeitet:

publicmain

Mitglied
Endlich funktioniert es.

Du hattest recht. Ein einfaches
Java:
out.flush();
hat gefehlt, damit die Daten gesendet werden. Echt komisch, dass das OpenBook nicht darauf aufmerksam gemacht hat.

Vielen Dank an alle Antworter!
 

publicmain

Mitglied
Eine Frage habe ich noch!

Wenn ich anstatt localhost meine IP eingebe, dann bekomme ich wieder keine Antwort.

Java:
server = new Socket ("localhost", 3141);
Java:
server = new Socket (meineip, 3141);

Woran liegt das?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Socket kein Input Netzwerkprogrammierung 8
4 Socket Kann kein ServerSocket erstellen Netzwerkprogrammierung 4
R RMI Kein "rmiC.exe" vorhanden, lediglich "rmiD.exe" Netzwerkprogrammierung 5
S Dateitransfer - kein end of stream Netzwerkprogrammierung 5
V Socket kein "aktives warten" Netzwerkprogrammierung 10
T XML-RPC kein Zugriff auf Server Interface Netzwerkprogrammierung 3
S FTP ich find kein anfang - generelle sachen Netzwerkprogrammierung 2
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
B Versuch mit Socket etwas zu lesen und zu schreiben Netzwerkprogrammierung 15
G Socket Socket Kommunikation Netzwerkprogrammierung 1
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
D Socket-Verbindungen übers Internet Netzwerkprogrammierung 4
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
A TCP multiClientServer mit socket mittels ObjectOutputStream Netzwerkprogrammierung 12
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
platofan23 Socket Java Socket mit DynDns nicht erreichbar Netzwerkprogrammierung 6
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
x46 Connection reset by peer: socket write error Netzwerkprogrammierung 6
x46 Socket Files per Socket verschicken Netzwerkprogrammierung 1
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D new ObjectInputStream(socket.getInputStream()); Netzwerkprogrammierung 15
E Socket Frage Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
F TCP Socket auf Verbindungsabbruch prüfen Netzwerkprogrammierung 15
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
T Socket Socket connections schließen? Netzwerkprogrammierung 2
D Socket Socket OutputStream leeren? Netzwerkprogrammierung 3
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
F Socket Socket in anderen Methoden Netzwerkprogrammierung 1
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
I Socket Netzwerkprogrammierung 1
F Wiederverbinden nach socket Abbruch Netzwerkprogrammierung 1
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
T Socket sendet erst nach socket.close() Netzwerkprogrammierung 2
F Socket Verbindungsaufbau abbrechen Netzwerkprogrammierung 3
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
Joew0815 socket event handler Netzwerkprogrammierung 2
F Einfache Socket Verbindung Netzwerkprogrammierung 2
A Socket Socket Receive-/SendBuffersize Netzwerkprogrammierung 0
D Socket server auf Smartphone Netzwerkprogrammierung 9
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
A Socket Socket Server netcat Netzwerkprogrammierung 1
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
D Socket Error: java.lang.NullPointerException Netzwerkprogrammierung 1
D TCP Socket funktioniert nicht richtig Netzwerkprogrammierung 3
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
B SSL Socket Netzwerkprogrammierung 2
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
S Socket SSL Socket und Sun/Oracle Java Netzwerkprogrammierung 5
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
precoc Server Socket Start / Stop Netzwerkprogrammierung 5
N SOCKET mehrere Requests, keep Alive serverspezifisch? Netzwerkprogrammierung 3
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
C Socket Systemsperren mit Socket Netzwerkprogrammierung 4
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
D Socket Multithread-Socket | Kurz vor dem Ziel Netzwerkprogrammierung 7
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Dynamische Socket-Thread Erzeugung Netzwerkprogrammierung 2
D Socket Socket absichtlich so schließen, dass Gegenseite java.net.SocketException: Connection reset wirft Netzwerkprogrammierung 4
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
A UDP verlorene Pakete/ socket.receive zu langsam Netzwerkprogrammierung 27
CookieSoft Socket Packet per Socket Netzwerkprogrammierung 8
CookieSoft Fehler bei Socket Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Per Socket auf POP3 zugreifen? Netzwerkprogrammierung 7
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
Z Socket Socket-Thread falsch? Netzwerkprogrammierung 5
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T Socket String zu Socket Netzwerkprogrammierung 26
M Datenübertragung per Socket nur alle 200ms Netzwerkprogrammierung 4
C Socket Socket: Connection timed out Netzwerkprogrammierung 3
T Socket blockierter Socket Netzwerkprogrammierung 4
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
T Alternative Socket mit Verbindungsabbruch Erkennung Netzwerkprogrammierung 2
M Socket, Ende Dateitransfer Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
D RMI oder Socket Netzwerkprogrammierung 4
H Socket Socket listening Netzwerkprogrammierung 11
D Client Socket mit Eventlistener? Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Netzwerkprogrammierung 18
N Socket geht auf Windows, aber auf Mac nicht ? Netzwerkprogrammierung 3
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben