 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 31.10.2013, 15:34 Titel: Daten versenden mit TSNE |
|
|
Hallo guten Tag.
Ich möchte bitte Daten versenden an einen Server:
------------------------------------------------------------------------
0 0 0 24 "sensor-update neu 45"
TSNE_Data_Send 1,.... ' Daten senden
-------------------------------------------------------------------------
Diese Daten oben dürfen nicht als String versendet werden, sondern
als Daten, das heisst den Text muss ich noch umwandeln in Bytes und in einen reservierten Datenbereich packen.
Wie kann ich jetzt mit TSNE diesen reservierten Datenbereich versenden ?
Der Port=42001
Steht der Port unten im Programm richtig?
Wie kann ich die Daten oben in den Datenbereich reinbringen ?
Code: |
Screen 16,32
#INCLUDE "TSNE_V3.bi"
SUB Verbunden(BYVAL id AS UINTEGER)
PRINT "Die Verbindung wurde hergestellt."
END SUB
SUB Getrennt(BYVAL id AS UINTEGER)
PRINT "Die Verbindung wurde getrennt."
END SUB
SUB NeueDaten(BYVAL id AS UINTEGER, BYREF daten AS STRING)
PRINT "Neue Daten von Client " & id & ": " & daten
END SUB
' Client erstellen
DIM bv AS INTEGER, Client AS UINTEGER, host AS STRING = "192.168.2.101"
bv = TSNE_Create_Client(Client, host, 42001, @Getrennt, @Verbunden, @NeueDaten)
IF bv <> TSNE_Const_NoError THEN PRINT "Server-Fehler: " & BV : END
bv = TSNE_WaitConnected(Client) ' auf Verbindung warten
IF bv <> TSNE_Const_NoError THEN PRINT "Fehler: " & TSNE_GetGURUCode(BV) : END
TSNE_Data_Send 1,................. ' Daten senden
TSNE_Disconnect(Client) ' Client beenden
TSNE_WaitClose(Client) ' warten bis Client beendet ist
|
Danke. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 31.10.2013, 17:03 Titel: |
|
|
Ein String ist nichts anderes als ein Datenbereich, den du versenden kannst. Ich würde daher eben gerade auf den Versand über String zurückgreifen:
zuSendendeNachricht = CHR(0, 0, 0, 24) & "sensor-update neu 45"
und diesen String am Ende bei der Empfangsstation wieder auseinander pflücken. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 31.10.2013, 17:17 Titel: |
|
|
Das geht nicht . Der Server ist ein anderes Programm , der die Daten so braucht. Die kann ich nicht zerpflücken.
Weil der String am Ende wieder eine 0 hat oder ähnliches...
Gruss |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 31.10.2013, 18:24 Titel: |
|
|
Wenn du dir mal TSNE_Data_Send genauer anschaust, siehst du, dass da auch einfach nur ein Datenbereich erstellt und gesendet wird, und zwar mit dem Inhalt, der sich an der Speicherstelle des Strings befindet und mit der Länge LEN(V_DATA). Das Nullbyte, das FreeBSAIC intern anhängt, sollte da also sowieso nicht mitgesendet werden und damit beim anderen Programm auch nicht ankommen. Du kannst es natürlich auch damit versuchen, einen ALLOCATE-Puffer zu reservieren, mit den Daten zu befüllen und mit sendto() zu verschicken. Aber wenn ich das in der Bibliothek richtig herauslese, sollte das rein gar keinen Unterschied machen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 31.10.2013, 21:14 Titel: |
|
|
Die Funktion sendet genau den Inhalt in der Stringvariable.
Da es sich hier um einen FB-String handelt, kannst du dort jedes beliebige zeichen rein packen, das möglich ist ... also von 0 bis 255
Packst du also einen Chr(0) in den String, dann wird auch dieses Chr(0) mit verschickt.
Zuerst solltest du aber bitte mal angeben, was genau diese 0 0 0 24 "sensor-update neu 45" genau ist, und wie es auszusehen hat.
ist 0 0 0 24 ein zerlegtes UInteger dessen werte du hier anzeigst?
vergleichbar mit:
oder ist das jeweils ein eigener UInteger Wert, vergleichbar mit:
Code: | Chr(0, 0, 0, 0) & Chr(0, 0, 0, 0) & Chr(0, 0, 0, 0) & Chr(0, 0, 0, 24) |
Und, der Text dahinter, wird dieser expliziet danach gesendet? und, wie im text erwähnt, soll da auch eine 0 am ende sein?
wenn ja, dann:
es gibt also diverse möglichkeiten dies zu machen.
Variante-1:
Code: | Dim RV as Integer = TSNE_Data_Send(client, Chr(0, 0, 0, 24) & "sensor-update neu 45") |
Variante-2:
Code: | Dim RV as Integer = TSNE_Data_Send(client, Chr(0, 0, 0, 24) & "sensor-update neu 45" & Chr(0)) |
Variante-3:
Code: | Dim RV as Integer = TSNE_Data_Send(client, "0 0 0 24 sensor-update neu 45") |
'...
PS:
Code: | TSNE_Data_Send 1, ... |
wenn du in deinem source wirklich eine "1" in diesem parameter angegebenhast, dann wird dies nicht "richtig" funktionieren.
es kan, aber kann auch nicht .. das liegt daran, weil du dort keine konstante angeben solltest, sondern eine TSNEID .. das ist eine eideutige nummer, welche du vom TSNE_Create_...() erhällst.
in deinem Fall (im source) ist dies "client"
sie enthält nach dem verbindugnsaufbau die eindeutige nummer dieser verbindung.
Das ist die selbe nummer wie sie auch in "V_TSNEID" (oder, wie bei dir als "id" definiert) steht.
Du solltest also wie bei den anderen funktionen (TSNE_WaitConnected, TSNE_Disconnect, ... usw) ebenfalls "client" nutzen, und nicht 1
Port: ja, das stimmt.
Wenn du sichergehen möchtest, ob der Funktionsaufruf "TSNE_Data_Send" erfolgreich war, dann kansnt du dort auch den GURU-Code auswerten ..
Code: | Dim RV as Integer = TSNE_Data_Send(...)
If RV <> TSNE_Const_NoError Then Print "Fehler beim senden:" & TSNE_GetGURUCode(BV) |
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|