Zdravím, potřeboval bych trochu nasměrovat. Pomocí následujících metod obdržím 1024 bytů dlouhý string
Private Sub Rcv(ByVal ar As IAsyncResult)
' Start the data receiving process
Dim intCount As Integer
Try
'data ready end the read
SyncLock tcpClnt.GetStream
intCount = tcpClnt.GetStream.EndRead(ar)
End SyncLock
If intCount < 1 Then
RaiseEvent Disconnected()
Exit Sub
End If
'put the byte daa into a string
BuildString(arData, 0, intCount)
SyncLock tcpClnt.GetStream
tcpClnt.GetStream.BeginRead(arData, 0, 1024, AddressOf Rcv, Nothing)
End SyncLock
Catch e As Exception
RaiseEvent Disconnected()
End Try
End Sub
Private Sub BuildString(ByVal Bytes() As Byte, ByVal offset As Integer, ByVal count As Integer)
Dim intIndex As Integer
Dim txt As String
objText = New StringBuilder
For intIndex = offset To offset + count - 1
txt = ChrW(Bytes(intIndex))
objText.Append(txt)
Next
RaiseEvent Receive(objText.ToString)
End Sub
Takovej string může být například: <xml Len="194" ID="0" Li="66"><data DateTime="2014-05-13 09:49:03" LRTP="3" LRTS="60" ModulName="S47" GroupName="Spojovaèky" IPAdr="172.27.70.205" EthPort="10001" InNum="1" InCount="0" /></xml> <xml Len="194" ID="0" Li="67"><data....... atd. Ale taky například: teTime="2014-05-13 09:49:03" LRTP="3" .... atd pokud posílaná zpráva byla dlouhá a rozdělilo se to tedy do více částí, takže tahle druhá část už začíná "teTime" Potřeboval bych tedy proceduru která bude reagovat na event Receive spouštěný procedurou BuildString která mi z toho stringu vyseparuje všechny <xml ... ></xml> a co zbude (už se blíží konec bufferu, takže je pokračování v další várce) nechá a další várku připojí k tomu, zase vyseparuje <xml ....></xml> atak dále. Dá se použít atribut Li="xx" kde xx je počet znaků od začátku <xml ... až po </xml> Mohl by mě někdo nasměrovat, jakým způsobem to uchopit? Děkuji
|