TCPListener

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Hallo Forum,
    ich bin neu und brauche dringend Hilfe.

    Habe einen TCPListener der auf eingehende Daten wartet. Das funktioniert auch einwandfrei, wenn die Daten die ich erwarte nicht mehr als 1460 Bytes haben. Wenn mehr erwartet wird dann kommen die Daten Segmentiert.
    Also die Daten können nicht mit einem ... netStream.Read( bytes , 0 , bytes.lenght) ... gelesen werden.
    Darum mache ich folgendes:

    do

    ....
    intReceived =netStream.Read(bytes, 0 , bytes.length)
    intEmpfangen + = intReceived
    .....

    loop while ( inEtmpfangen < intErwartet)

    Was passiert: Die ersten 1460 Bytes kommen sehr schnell , dann dauert es etwa 200 ms und der Rest ist da . Da können dann auch 10k oder mehr sein.
    Woran könnte das liegen? Auf den Sender habe ich keinen Einfluss.
    Das blokieren von ca 200ms is einfach viel zu lange. Liegt das an der netstream.Read Implementierung?
    Sollte ich prinzipiell anders vorgehen. Viellleicht den nach jeden Päckchen den Client schliessen und wieder neu auf Anfrage warten.
    Gruß
    Otto
    Ein TcpListener kann doch gar keine Daten erwarten - das ist doch Aufgabe eines TcpClients.
    Und letzterer sollte die Daten halt asynchron empfangen.
    Viel mehr kann man erstmal noch nicht sagen - hängt halt vom Context der Gesamt-Anwendung ab - einen Chat würde man anders aufziehen als eine Peer-to-Peer - Kommunikation.
    Schon klar !
    Der Listener akzeptiert den Client und dann will ich die Daten über den Stream lesen. Hierfür starte ich einen eigenen Thread, der solange Daten engegennimmt bis ich alles habe was ich erwarte.
    Die Gegenstelle ist kein PC sondern eine Steuerung. Diese schickt wohl kleine Segemente (1460 Bytes) und erwartet für jedes Segment eine ACK.
    Anscheinend quittiert aber meine PC-Anwendung die Segemente nicht sofort, sondern wartet erstmal 200ms ob noch mehr kommt.
    Wie kann ich dieses Verhalten umgehen? Jedes Segment soll sofort quiitiert werden.
    Hat jemand Rat ?
    Gruß
    Otto