TCP/IP Buffer



  • Hallo zusammen

    ich habe eine TCP/IP Verbindung zwischen meinem Rechner und einem Roboter. Das ganze läuft nicht multithreaded, das heisst wenn mein Programm in einer Routine hängt, dann schickt der Robi zwar Positionsdaten, aber mein Programm nimmt sie nicht auf. Das Problem ist nun, wenn ich zulange in einer Routine hänge, dass dann Befehle, die an den Robi aus dieser Routine heraus gehen, erst ausgeführt werden, wenn meine Routine fertig ist. Liegt das daran dass mein Buffer der TCP/IP Verbindung zu klein ist? Ich habe zwar schon versucht den Buffer zu erhöhen, leider ist mein Problem nicht besser geworden. Gibt es eine Möglickeit den Buffer einer TCP/IP Verbindung zu leeren innerhalb eines Programms? Oder liegt es vielleicht gar nicht an dem Buffer?

    Ich wusste leider nicht genau, ob der Thread jetzt hierhin gehört oder besser in einen anderen Teil des Forums passt, sorry dafür.



  • Das kommt darauf an wie deine Routine aufgebaut ist. Ohne etwas Code wirds schwierig dir zu helfen.

    Wenn deine Routine so aufgebaut ist, dann werden die Daten erst am Ende gesendet:

    void Routine()
    {
       while(/*Bedingung*/)
       {
           // erzeuge befehle
       }
       Verbindung.send(befehle,...);
    }
    

    Ist sie so aufgebaut, dann sollten die Daten sofort gesendet werden.

    void Routine()
    {
       while(/*Bedingung*/)
       {
           // erzeuge Befehl X
           Verbindung.send(befehlX,...);
       }
    }
    

    Das ganze kann auch von anderen Bedingungen abhängen.



  • O.k., sorry, etwas Code ist natürlich immer hilfreich.

    Also meine Routine ist so aufgebaut:

    void Hauptroutine()
    {
      Routine1();
      Routine2();
      Routine3();
    }
    

    In Routine2() wird dabei der Befehl an meinen Roboter gesendet:

    void Routine2()
    {
      send.Befehl();
      while(i < 100)
      {
        tue irgendwas...
        i++;
      }
    }
    

    Was vielleicht am wichtigsten ist: In Routine1() berechne ich etwas sehr speicheraufwendiges, und in dieser Zeit besteht zwar die Verbindung weiter, die gesendeten Daten des Roboters werden aber von meiner Seite aus nicht empfangen bzw. weiterverarbeitet. Je länger die Routine1() rechnet, desto wahrscheinlicher wird der Befehl an den Robi erst nach beenden der Hauptroutine() ausgeführt. Daher gehe ich davon aus, dass es ein Speicherproblem ist. Aber wie gesagt, ich bin mir nicht sicher, dazu kenne ich mich zuwenig in der ganzen TCP/IP-Geschichte aus.
    }



  • Also wenn du gleichtzeitig Befehle senden / empfangen und nebenbei noch was berechnen willst, dann benutze einen 2. Thread. Anders gehts nicht.


Anmelden zum Antworten