Java Socket

Status
Nicht offen für weitere Antworten.

hamstor

Mitglied
Hallo zusammen, ich hätte da mal eine Frage.



Server:

ServerSocket echod = new ServerSocket(port);
System.out.println("Vor accept()");
Socket socket = echod.accept();
System.out.println("Verbindung hergestellt");
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
PrintStream pout = new PrintStream(out);
pout.print( "Hello-World vom helloServer");

Client:


Socket sock = new Socket(hostname, portnr);
InputStream in = sock.getInputStream();
BufferedInputStream bin = new BufferedInputStream(in);

Durch den Socket() aufruf wird über den Konstruktor wird eine Verbindung zum Server erstellt. Mich interessiert imens, woher der inputstream des Clients weiss, dass über den outputstream des Server etwas an das Socket geschickt wird und andersherum -> woher der intputstream des Servers weiss.... Oder wartet der Inputstream sobald er erzeugt ist einfach eine gewisse Zeitspanne? Und wird diese überschritten, gehts im Quellcode weiter.
Ich seh hier immer nur zwei Quellcodes, die von oben nach unten abgearbeitet werden müssen, könnte es nicht auch passieren, dass beim Client schon alles durchgelaufen ist, ohne dass es zu einem Austausch mit dem Server kam, obwohl dieser etwas über den outputstream verschicken will.
Bin für jede Antwort dankbar.

Mfg

hamstor
 

dayaftereh

Top Contributor
Also ist ja so, das wenn du eine Socket Verbindung hergestelt hast, wird sie ja nicht gleich wieder geschlossen(nur bei einer http verbindung), sonder du kanst daten aus tauschen sollange du willst, es kann natürlich passieren, das der Server den Cleint nicht anerkennt, aber dan wird bei dem Cleint eine Exeption geworfen welche weiter verabeitet werden muss und dan kommt es auf die sauberkeit des Codes an, wie es weiter geht.

Das mit den Streams ist glaube ich so, das es ein tunnel ist, der in beiden richtugen befahr bar ist. sollange du den tunnel nicht zerstörst, werden weiter daten ausgetauscht.Wenn du jetzt zubeispiel den InputStream anschaust, gibt es die funktion available, darüber kannst du prüfen, ob darte vorhanden sind!!

Es gibt ne möklichkeit dem ServerSocket eine timeout mit zu geben!!!
 

Murray

Top Contributor
In Deinem Beispiel liest der Client nichts; der Code wird einfach durchlaufen, egal ob der Server noch etwas schickt.

Die Streams wissen natürlich nichts davon, was auf der anderen Seite noch passieren wird. OutputStream#write schreibt einfach, egal ob auf der anderen Seite (schon) jemand lauscht. Der Inhalt wird dann einfach zwischengespeichert. Und inputStream#read versucht, etwas zu lesen - wenn noch nichts da ist, dann blockiert die Methode solange, bis etwas da ist (wobei man da auch noch einen Timeout setzen kann).
 

hamstor

Mitglied
Erstmal danke für die schnell Antwort.

Hier der gesamte Teil, wo beim Client einglesen wird.

try {

String hostname = args[0];
int portnr = new Integer(args[1]).intValue();
Socket sock = new Socket(hostname, portnr);


InputStream in = sock.getInputStream();
BufferedInputStream bin = new BufferedInputStream(in);


int x = bin.read();
while ( x != -1)
{ char c = (char) x;

System.out.print(c);
x = bin.read();

}


} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
System.out.println("Durchgelaufen ohne zu blockieren");

Ich hatte das mit der read() methode auch schon gelesen, dass er dann blockieren müsste. Hab dann auch mal eine Verbindung erstellt bei der ich vom server aus nichts geschickt habe, dann ist er beim client aber trotzdem sofort durchgelaufen, ohne bei bin.read() zu blockieren.
Für weitere Antowrten sher dankbar :D
 

dayaftereh

Top Contributor
Eigentlich ist es so

Der Server Wartet

Der Cleint Verbindet sich

daraus endsteht die Verbindung

Darum ist es unlogisch das der Cleint auf eine Verbindung warte soll. weil der sollte sich doch zum Server Verbinden oder sehe ich hier was Falsch°°
 

hamstor

Mitglied
Die eigentliche Verbindung zwischen Server und Client beginnt beim KOnstruktor im Client -> Da wird die Verbindung hergestellt. Ist die Verbindung dann zwischen Server und Client hergestellt, wird auf beiden Seiten der Quellcode durchlaufen.
Nochmal eine Frage an Herrn Murray(falls er nochmal rein schaut :lol: ): wird das blockieren der read()-methode abgeborchen, sobald die socket verbindung auf dem server geschlossen wird?..
 

hamstor

Mitglied
Zusatz2* Achso hab dich glaub falsch verstanden, also meinte natürlichd das die verbindung vom server zum client schon bestanden hatte, als ich beim client auf eine eingehende Nachricht vom server gewartet habe.
 

Murray

Top Contributor
hamstor hat gesagt.:
Nochmal eine Frage an Herrn Murray(falls er nochmal rein schaut :lol: ): wird das blockieren der read()-methode abgeborchen, sobald die socket verbindung auf dem server geschlossen wird?..
Ja - in dem Fall wird eine Exception geworfen.
 

hamstor

Mitglied
Hmm,

ich hab das jetzt noch mal ausprobiert. Wenn ich den code vom Client benutz, so wie ich ihn oben angegeben habe, und eine verbindung zum server aufbaue, aber nur eine Verbindung, also ohne dass ich etwas von diesem an den Client schicke, müsste er mir eigentlich beim client bei int x = bin.read() eine Exception werfen, was er aber icht macht.
Jemand ne Ahnung warum? :shock:
 

hamstor

Mitglied
try {
System.out.println("Warte auf Verbindung auf Port 7013..."); // 7013


ServerSocket echod = new ServerSocket(7013); // Belegt Port

System.out.println("Vor accept()");
Socket socket = echod.accept();

System.out.println("Verbindung hergestellt");

socket.close();
echod.close();
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
}

ich beende die Serververbindung mit socket.close..?
Es kommt jedoch keine Exception beim Client :(
 

dayaftereh

Top Contributor
Die fehler meldung kommt erst wieder, wenn du wieder beim Cleint versuchst etwas an den Server zu schicken!
 

hamstor

Mitglied
Ich habs raus bekommen :D

wenn man keine Antwort an den Client schickt und der server geschlossen wird, bekommt die read()-methode den wert -1 also endoffile geschickt... und geht also weiter. Wird der socket des SErvers jedoch nicht geschlossen, wartet die read-methode( ka wie lange die zeitspanne ist) und schmeisst anschliessend eine Exception, weil sie vom server keine Antwort bekommt. Danke euch 2 für eure Hilfe...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Java - Socket - Datenübertragung Java Basics - Anfänger-Themen 18
C Socket Programmierung Java Java Basics - Anfänger-Themen 4
S Java Socket Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
laxla123 If-else Java Java Basics - Anfänger-Themen 4
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
S Substring in java Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben