Italian Client Socket & AsyncStreams

Pesciolina

Active Member
Licensed User
Longtime User
Buon giorno a tutti,
sto sviluppando un'App per leggere dati da centraline Rfid alla quale mi collego con un client Socket e scriverli in un database Sqllite.
La centralina manda delle stringhe di lunghezza variabile con il terminatore CRLF.
Se mi arrivano 10 stringhe insieme la procedura che ho fatto non riesce a separarle e quindi la perdo.

Public Sub ConnectToServer(Host As String)
Log("Trying to connect to: " & Host)
CloseExistingConnection
Dim client As Socket
client.Initialize("client")
client.Connect(Host, PORT, 0)
Wait For Client_Connected (Successful As Boolean)
If Successful Then
astream.Initialize(client.InputStream, client.OutputStream, "astream")
UpdateState (True)
ContatoreChip = 0

Else
Log("Failed to connect: " & LastException)
End If
End Sub

Sub AStream_NewData (Buffer() As Byte)
CallSub2(Main, "NewData", Buffer)
End Sub

Public Sub NewData (data() As Byte)
Dim ready_fornext As Boolean
Dim rsp As String

rsp = BytesToString(data, 0, data.Length, "UTF8")

all_string_TCP= all_string_TCP & rsp

ready_fornext = rsp.EndsWith(Chr(10))

If ready_fornext Then

If all_string_TCP.Length = 60 Then
AnalizzaDato(rsp)
all_string_TCP=""
End If
all_string_TCP=""

End If
End Sub

Grazie 1000 per l'eventuale aiuto
 

sirjo66

Well-Known Member
Licensed User
Longtime User
ciao Pesciolina e benvenuta tra noi

il problema è che tu fai un test solo sull'ultimo carattere della tua stringa (con EndsWith), mentre dovresti vedere se la stringa contiene un CRLF, ed estrarre la prima parte della stringa fino al primo CRLF, e poi lo analizzi, poi controlli se la stringa contiene un altro CRLF, estrai la parte della stringa eccetera eccetera, quindi ti serve un ciclo DO...LOOP
 
Top