Ich schreibe ein Programm mit Java non-blocking Socket und TCP. Ich verstehe, dass TCP ein Stream-Protokoll ist, aber das Underlayer-IP-Protokoll verwendet Pakete. Wenn ich SocketChannel.read (ByteBuffer dst) anrufe, bekomme ich dann immer den ganzen Inhalt von IP-Paketen? oder es kann an jeder Position in der Mitte eines Pakets enden?Nicht blockierende Socket mit TCP
Das ist wichtig, weil ich versuche, einzelne Nachrichten über den Kanal zu senden. Jede Nachricht ist klein genug, um in einem einzigen IP-Paket gesendet zu werden, ohne fragmentiert zu werden. Es wäre cool, wenn ich immer eine ganze Nachricht bekommen könnte, indem ich read() auf der Empfängerseite aufruft, ansonsten muss ich eine Methode implementieren, um die Nachrichten wieder zusammenzusetzen.
Bearbeiten: angenommen, dass auf der Senderseite Nachrichten mit einem langen Intervall (wie 1 Sekunde) gesendet werden, so dass sie nicht in einem IP-Paket gruppieren. Auf der Empfängerseite ist der zum Lesen verwendete Puffer (ByteBuffer dst) groß genug, um irgendeine Nachricht zu halten.