' schrieb:Hallo,
vielleicht kann mir hier jemadn helfen.
Möchte einen String über eine TCP Verbindung senden und Empfangen. Ziel soll der localhost mit der Portnummer 1234 sein.
Hiermit will ich Daten aus LabVIEW einem anderen Programm zur Verfügung stellen.
Empfangen funktioniert, jedoch macht das Senden Probleme. Der Aufbau ist der identsiche wie bei Empfangen, mit dem
Unterschied, dass TCP schreiben eingefügt wurde.
Beim Ausführen erfolgt Fehler 63.
Lesen und Scheiben sind in einer Sequenz hintereinander.
Füge beide Sequenzen mit der Fehlermeldung bei.
i2dx hat es schon angesprochen. Das wahrscheinlichste Problem ist: wie weiss der Empfänger dass jetzt alle Daten angekommen sind. Dazu gibt es grundsätzlich verschiedene Ansätze. Für Text basierte Protokolle wird dabei meist ein <CR><LF> Zeilenumbruch angefügt. Für binäre Protokolle wird meist im Datenstrom eine explizite Länge vorangestellt oder ein spezifischer Character reserviert als Ende-Zeichen.
Wenn Du die default Einstellung bei TCP Read verwendest beendet LabVIEW den Lesevorgang automatisch nach dem Lesen der entsprechenden Anzahl Bytes oder dem Timeout und liefert Dir die Daten zurück. Falls Du ein Text basiertes Protokoll hast wäre es aber wahrscheinlich sinnvoll den TCP Read Mode auf CRLF zu setzen, damit das Lesen nicht unnötig bis zum Ablauf des Timeouts hängen bleibt.
Beim Schreiben fügt LabVIEW nicht automatisch ein <CR><LF> ans Ende des Strings, Das musst Du schon explizit selber tun, ansonsten könnte man ja das TCP Write VI nicht benützen um auch binäre Protokolle zu implementieren. Ohne <CR><LF> wartet Dein Client aber wahrscheinlich ewig ohne das eigentlich bereits komplett empfangene Kommando je als gültig zu erkennen.
Rolf Kalbermatter