Hej på Er!Winsock skickar trasiga data?
Nu håller jag på att bli galen!
Winsock... need i say more?
Jag har gjort en client/server applikation som skickar strängar mellan sig.
Klienten skickar en stränge med IP-Adress och SQL-Fråga, och server
ska sedan utföra denna SQL-Fråga mot en databas och skicka
tillbaka svaret via winsock i strängar.
Problemet är när svaret kommer tillbaka via winsock till klienten
så är datat ibland korrupt. Inte alltid, men ibland.
Koden ser ut enligt följande
---------------------------------
Kod på servern för att skicka data:
<code>
Public Sub SendInfo(strData As String, Index As Integer)
Dim aryDataInfo
Dim strIPAdress As String
Dim strSQLQuery As String
Dim rsTemp As Recordset
Dim DataConn As New clsdataconn
aryDataInfo = Split(strData, "§", -1, vbTextCompare)
strIPAdress = Trim(aryDataInfo(1))
strSQLQuery = Trim(aryDataInfo(2))
Set rsTemp = DataConn.GetRecordset(strSQLQuery, strIPAdress)
If rsTemp.EOF Then
lblStatus.Caption = "Svaret från automaten innehöll ingen data..!"
Sockets.SendData Index, "TRANS_START" & Chr$(0)
Sockets.SendData Index, "TRANS_STOP" & Chr$(0)
DoEvents
Exit Sub
End If
Dim aryEntry
Dim aryText
Dim intCounter As Integer
Dim intAryCounter As Integer
Sockets.SendData Index, "TRANS_START" & Chr$(0)
lblStatus.Caption = "Börjar skicka data till klienten... OK!"
Do While Not rsTemp.EOF
lblStatus.Caption = "Svar från automaten: " & rsTemp(3)
Sockets.SendData Index, Replace(fcnDecodeATMData(rsTemp(0), rsTemp(1), rsTemp(2), rsTemp(3), rsTemp(4), rsTemp(5), rsTemp(6), rsTemp(7)), vbCrLf, "%") & Chr$(0)
'Datat som skickar på raden ovan ser ut ungefär så här: "120125 1201 BEGÄRT . 900SEK 2029§3§UTTAGSBEGÄRAN" & Chr$(0)
DoEvents
rsTemp.MoveNext
Loop
lblStatus.Caption = "Slutfört överföring till klienten... OK!"
Sockets.SendData Index, "TRANS_STOP" & Chr$(0)
Set rsTemp = Nothing
End Sub
</code>
Koden på klienten för att ta emot data:
<code>
Private Sub Sockets_DataArrival(ByVal bytesTotal As Long)
Dim Msg As String
Dim Pieces() As String
Dim aryStrings() As String
Dim i As Integer
Dim strFulSplit
Dim intFulSplitCounter
Dim liJournal As ListItem
Sockets.GetData Msg
Pieces = Split(Msg, Chr$(0))
For i = 0 To UBound(Pieces) - 1
If Mid(Pieces(i), 1, 11) = "TRANS_START" Then
ShowStatus "Väntar på data från automaten... Vänta!"
ElseIf Mid(Pieces(i), 1, 10) = "TRANS_STOP" Then
ShowStatus "Samtliga data från automaten överförda!"
Me.MousePointer = vbNormal
Else
If InStr(1, Pieces(i), "§", vbTextCompare) = 0 Then
MsgBox "Fel i data... Stänger funktionen"
Exit Sub
End If
aryStrings = Split(Pieces(i), "§", , vbTextCompare)
If InStr(1, aryStrings(0), "%") Then
strFulSplit = Split(aryStrings(0), "%", , vbTextCompare)
For intFulSplitCounter = 0 To UBound(strFulSplit)
Set liJournal = lwJournal.ListItems.Add(, , strFulSplit(intFulSplitCounter))
Next intFulSplitCounter
Else
Set liJournal = lwJournal.ListItems.Add(, , aryStrings(0))
End If
liJournal.ListSubItems.Add , , aryStrings(1)
liJournal.ListSubItems.Add , , aryStrings(2)
End If
Next i
End Sub
</code>
Normalt så ser varje rad ut så här som servern skickar till klienten:
<code>
120125 1201 BEGÄRT . 900SEK 2029§3§UTTAGSBEGÄRAN
120125 1201 BEGÄRT . 900SEK 2029§3§UTTAGSBEGÄRAN
120125 1201 BEGÄRT . 900SEK 2029§3§UTTAGSBEGÄRAN
</code>
Men rätt som det är så kommer en sån här snutt:
<code>
SBEGÄRAN
</code>
Har nån någon som helst aning om vad jag gör för fel?
Tacksam för snabba svar!
Hälsningar
Peter Carlsson