
Кодю как умею 8].
Это класс. Сначала спарсить инстанс сокета и :
Private Sub ws_Main_DataArrival(ByVal bytesTotal As Long)
Call cls_PD.DataArrival
End Sub
Работает специально для отделения пакетов ...
ИМХО
>ты совершенно прав. нелья надеяться на то, как винсок разобьет >пакеты. лучше делать это вручную: создать свой буффер, и посылать >файл по пакетам размером примерно 2-4 кб.
v-adix совершеннон не прав. Но лень чепятать

'==================================
' =X=
'==================================
' Packet Deployment Module
'==================================
'Requied Files:
'MSWinsock
'==================================
Option Explicit
Dim ws_Main As Winsock
Dim s_MainBuf As String
Private Const l_PHSize = 10 'Packet Header Size
Public Event GotPacket(s_PData As String)
'Parcing Instance
Public Sub Inst(ByRef ws_Socket As Winsock)
Set ws_Main = ws_Socket
End Sub
'Getting Data
Public Sub DataArrival()
Dim l_PSize As Long
Dim s_Output As String
ws_Main.PeekData s_MainBuf
Start:
'Exiting if it is less than a header size
If Len(s_MainBuf) < l_PHSize Then Exit Sub
'Getting Packet Size out of the Header
l_PSize = CLng(Trim(Left(s_MainBuf, l_PHSize)))
Select Case Len(s_MainBuf)
Case Is >= l_PSize 'Packet is less than Data in Buffer
'Getting Packet Data
s_Output = Mid(s_MainBuf, l_PHSize + 1, l_PSize - l_PHSize)
'Clearing Data in Main Buffer
s_MainBuf = Right(s_MainBuf, Len(s_MainBuf) - l_PSize) ' 'Mid(s_MainBuf, l_PSize, Len(s_MainBuf) - l_PSize)
'If Len(s_MainBuf) - l_PSize = 0 Then s_MainBuf = ""
Dim s_Void As String
ws_Main.GetData s_Void
s_Void = ""
'Parcing Data
RaiseEvent GotPacket(s_Output)
'Recursing
GoTo Start
Case Is > l_PSize
Exit Sub 'Waiting for the rest of the Packet
End Select
End Sub
'Sending Data
Public Sub SendData(s_Data As String)
Select Case GD.b_UseCrypto
Case Is = False
ws_Main.SendData Left(Trim(Str(Len(s_Data)) + 10) & " ", 10) & s_Data
Case Is = True
Dim X As New cls_RC4
'Crypting
s_Data = X.EncryptString(s_Data, GD.s_SessionCK, False)
s_Data = "CRTD_" & s_Data
ws_Main.SendData Left(Trim(Str(Len(s_Data)) + 10) & " ", 10) & s_Data
End Select
End Sub
'Error
Public Sub OnError()
s_MainBuf = ""
ws_Main.Close
End Sub
'=================================