Java Socket readLine() was passiert?

  • Antworten:2
  • OffenNicht stickyNicht beantwortet
Gelöschter Account
  • Forum-Beiträge: 47

15.05.2017, 22:05:47 via Website

Hallo, ich hab ein Serversocket welcher Daten liest.

private BufferedReader bf = this.reader = new BufferedReader(newInputStreamReader(this.socket.getInputStream()));

So dieser ließt nun Daten mit der methode bf.readLine();
Doch kommen wir nun zu meiner Frage, was passiert wenn ein Socket einen so langen String geschickt bekommt, das der Buffer von BufferedReader ans Limit geht? Worauf ich hinaus will, ist das ich will das mein Server sicher ist und nicht irgendwelche Leute auf die Idee kommen endlose Strings/Daten zu senden, welche dann den Thread blocken.

Würde mich um eine Erklärung freuen, danke.

Antworten
  • Forum-Beiträge: 2.902

15.05.2017, 22:50:27 via Website

Hallo Subrim,

die einfachste Methode ist, serverseitig die Blöcke zu splitten, diese in vielleicht in einen
Recordblock und diesen mit HeaderFlag, LengthByte und ggf CRC32/ Verschlüsselung zu versehen.

Stimmen im Header die Blöcke nicht überein, machst du den Socket zu.

das ist eine recht gängige Methode wenn , man mit Daemons aufsetzt

Ich würde eh vorschlagen , Socketbasierend zu arbeiten.

— geändert am 15.05.2017, 23:06:24

Liebe Grüße - Stefan
[ App - Entwicklung ]

subrim

Antworten
Gelöschter Account
  • Forum-Beiträge: 47

16.05.2017, 22:44:13 via Website

Danke, ich lese jetzt einfach byte für byte. Die Kommandos sind eh nicht lang von daher ist das kein Problem.
Ist theoretisch jetzt noch möglich irgendwie das zu umgehen? Der code schließt automatisch dann Verbindung wenn die maximale Anzahl an Bytes empfangen wurde.

Antworten

Empfohlene Artikel