Teil 2 (Fortsetzung Code für Client)
Private Sub Winsock1_Close()
Label1 = "Verbindung vom Server getrennt. Wartezustand."
VerbindungTrennenSachen
TimerVerbinden.Enabled = True
Command1.Enabled = False
End Sub
Private Sub Winsock1_Connect()
Label1 = "Verbunden."
TimerLeerlaufErhalten.Enabled = True
Command1.Enabled = True
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strTemp As String, arrTemp() As Byte, lngTemp As Long, bAlreadyRunning As _
Boolean
On Error GoTo WsockErr
Static sWsockZwischenspeicher As String
Static sPaketZwischenspeicher As String
Static nGesamtlaengePaket As Long
Static nBereitsuebertragenPaket As Long
If bytesTotal = 0 Then
sWsockZwischenspeicher = ""
sPaketZwischenspeicher = ""
nGesamtlaengePaket = 0
Exit Sub
End If
Winsock1.GetData arrTemp, vbArray + vbByte
strTemp = arrTemp
sWsockZwischenspeicher = sWsockZwischenspeicher & strTemp
If bAlreadyRunning Then Exit Sub
bAlreadyRunning = True
If nGesamtlaengePaket > 0 Then
MidB$(sPaketZwischenspeicher, nBereitsuebertragenPaket + 1) = MidB$( _
sWsockZwischenspeicher, 1, nGesamtlaengePaket - nBereitsuebertragenPaket)
lngTemp = LenB(MidB$(sWsockZwischenspeicher, 1, nGesamtlaengePaket - _
nBereitsuebertragenPaket))
nBereitsuebertragenPaket = nBereitsuebertragenPaket + lngTemp
sWsockZwischenspeicher = MidB(sWsockZwischenspeicher, 1 + lngTemp)
If nGesamtlaengePaket = nBereitsuebertragenPaket Then
nGesamtlaengePaket = 0
If Not sPaketZwischenspeicher = "" Then Winsock1DatenEmpf _
sPaketZwischenspeicher
End If
End If
Do While LenB(sWsockZwischenspeicher) >= 4 And nGesamtlaengePaket = 0
nGesamtlaengePaket = CLng(AscB(MidB(sWsockZwischenspeicher, 1, 1))) * 256& _
* 256& * 256& + CLng(AscB(MidB(sWsockZwischenspeicher, 2, 1))) * 256& * _
256& + CLng(AscB(MidB(sWsockZwischenspeicher, 3, 1))) * 256& + CLng(AscB( _
MidB(sWsockZwischenspeicher, 4, 1)))
If Not nGesamtlaengePaket = 0 Then
nBereitsuebertragenPaket = LenB(MidB$(sWsockZwischenspeicher, 5, _
nGesamtlaengePaket))
sPaketZwischenspeicher = StringB(nGesamtlaengePaket, ChrB(0))
MidB$(sPaketZwischenspeicher, 1) = MidB$(sWsockZwischenspeicher, 5, _
nGesamtlaengePaket)
End If
sWsockZwischenspeicher = MidB$(sWsockZwischenspeicher, 5 + _
nBereitsuebertragenPaket)
If nGesamtlaengePaket = nBereitsuebertragenPaket Then
nGesamtlaengePaket = 0
If Not sPaketZwischenspeicher = "" Then Winsock1DatenEmpf _
sPaketZwischenspeicher
End If
Loop
bAlreadyRunning = False
Exit Sub
WsockErr: 'Falsches Sendeformat
bAlreadyRunning = False
nGesamtlaengePaket = 0
sWsockZwischenspeicher = ""
End Sub
Private Sub VerbindungTrennenSachen()
TimerLeerlaufErhalten.Enabled = False
Winsock1_DataArrival 0
End Sub
Private Sub Winsock1DatenEmpf(Daten As String)
'... Datenpaket empfangen
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal _
HelpContext As Long, CancelDisplay As Boolean)
Winsock1_Close
If Number = 10053 Then
Label1 = "Verbindung durch Fehler unterbrochen. Wartezustand."
Else
Label1 = "Verbindung konnte nicht hergestellt werden. Wartezustand."
End If
End Sub |