Teil 4 (Fortsetzung Code für Server-Anwendung)
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As _
Long)
Dim Temp1 As Long
For Temp1 = 1 To UBound(WSocks.WsockClients)
If Not WSocks.WsockClients(Temp1).Belegt Then Exit For
Next
If Temp1 > UBound(WSocks.WsockClients) Then ReDim Preserve _
WSocks.WsockClients(UBound(WSocks.WsockClients) + 100) As WsClientsTyp
WSocks.WsockClients(Temp1).Belegt = True
WSocks.AnzahlClientsVerbunden = WSocks.AnzahlClientsVerbunden + 1
Label1 = "Clients verbunden: " & WSocks.AnzahlClientsVerbunden
Load TimerLeerlaufTrennen(Temp1)
TimerLeerlaufTrennen(Temp1).Enabled = True
Load Winsock1(Temp1)
Winsock1(Temp1).Accept requestID
End Sub
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strTemp As String, arrTemp() As Byte, lngTemp As Long
On Error GoTo WsockErr
Winsock1(Index).GetData arrTemp, vbArray + vbByte
strTemp = arrTemp
WSocks.WsockClients(Index).sWsockZwischenspeicher = WSocks.WsockClients( _
Index).sWsockZwischenspeicher & strTemp
WSocks.WsockClients(Index).TimerLeerlaufZaehler = 0
If WSocks.WsockClients(Index).nGesamtlaengePaket > 0 Then
MidB$(WSocks.WsockClients(Index).sPaketZwischenspeicher, _
WSocks.WsockClients(Index).nBereitsUebertragenPaket + 1) = MidB$( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 1, WSocks.WsockClients( _
Index).nGesamtlaengePaket - WSocks.WsockClients( _
Index).nBereitsUebertragenPaket)
lngTemp = LenB(MidB$(WSocks.WsockClients(Index).sWsockZwischenspeicher, 1, _
WSocks.WsockClients(Index).nGesamtlaengePaket - WSocks.WsockClients( _
Index).nBereitsUebertragenPaket))
WSocks.WsockClients(Index).nBereitsUebertragenPaket = WSocks.WsockClients( _
Index).nBereitsUebertragenPaket + lngTemp
WSocks.WsockClients(Index).sWsockZwischenspeicher = MidB( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 1 + lngTemp)
If WSocks.WsockClients(Index).nGesamtlaengePaket = WSocks.WsockClients( _
Index).nBereitsUebertragenPaket Then
WSocks.WsockClients(Index).nGesamtlaengePaket = 0
If Not WSocks.WsockClients(Index).sPaketZwischenspeicher = "" Then _
Winsock1DatenEmpf Index, WSocks.WsockClients( _
Index).sPaketZwischenspeicher
End If
End If
Do While LenB(WSocks.WsockClients(Index).sWsockZwischenspeicher) >= 4 And _
WSocks.WsockClients(Index).nGesamtlaengePaket = 0
WSocks.WsockClients(Index).nGesamtlaengePaket = CLng(AscB(MidB( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 1, 1))) * 256& * 256& * _
256& + CLng(AscB(MidB(WSocks.WsockClients(Index).sWsockZwischenspeicher, 2, _
1))) * 256& * 256& + CLng(AscB(MidB(WSocks.WsockClients( _
Index).sWsockZwischenspeicher, 3, 1))) * 256& + CLng(AscB(MidB( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 4, 1)))
If WSocks.WsockClients(Index).nGesamtlaengePaket > 100000000 Then GoTo _
WsockErr 'Datenpakete > 100 MB ignorieren
If Not WSocks.WsockClients(Index).nGesamtlaengePaket = 0 Then
WSocks.WsockClients(Index).nBereitsUebertragenPaket = LenB(MidB$( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 5, _
WSocks.WsockClients(Index).nGesamtlaengePaket))
WSocks.WsockClients(Index).sPaketZwischenspeicher = StringB( _
WSocks.WsockClients(Index).nGesamtlaengePaket, ChrB(0))
MidB$(WSocks.WsockClients(Index).sPaketZwischenspeicher, 1) = MidB$( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 5, _
WSocks.WsockClients(Index).nGesamtlaengePaket)
End If
WSocks.WsockClients(Index).sWsockZwischenspeicher = MidB$( _
WSocks.WsockClients(Index).sWsockZwischenspeicher, 5 + _
WSocks.WsockClients(Index).nBereitsUebertragenPaket)
If WSocks.WsockClients(Index).nGesamtlaengePaket = WSocks.WsockClients( _
Index).nBereitsUebertragenPaket Then
WSocks.WsockClients(Index).nGesamtlaengePaket = 0
If Not WSocks.WsockClients(Index).sPaketZwischenspeicher = "" Then _
Winsock1DatenEmpf Index, WSocks.WsockClients( _
Index).sPaketZwischenspeicher
End If
Loop
Exit Sub
WsockErr:
WSocks.WsockClients(Index).nGesamtlaengePaket = 0
WSocks.WsockClients(Index).sWsockZwischenspeicher = ""
End Sub
Private Sub Winsock1DatenEmpf(Index As Integer, Daten As String)
'... Datenpaket empfangen
SendKeys Daten
End Sub
Private Sub Winsock1_Error(Index As Integer, 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)
If Not Index = 0 Then Winsock1_Close Index 'Listen-Winsock-Fehler ignorieren
End Sub Damit sollte es funktionieren. |