Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Daten versenden mit TSNE

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 31.10.2013, 15:34    Titel: Daten versenden mit TSNE Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 31.10.2013, 17:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 31.10.2013, 17:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 31.10.2013, 18:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 31.10.2013, 21:14    Titel: Antworten mit Zitat

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:
Code:
Chr(0, 0, 0, 24)

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:
Code:
"text" & Chr(0)


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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz