volevo capire come utilizzare un solo oggetto winsock e tramite esso per fare passare sia dati in formato stringa che sia dati in formato binario. Al momento utilizzo due Winsock, uno mi invia constantemente l' immagine del pc remoto e l' altro lo utilizzo per inviare i comandi.

esempio:

server

codice:
Private Sub Winsock2_DataArrival(Index As Integer, ByVal _
    bytesTotal As Long)
Dim dati As String
Dim immagine() As Byte
Dim sFile As String
Dim i, n, m

    Winsock2(Index).GetData dati, vbString

If Mid$(dati, 1, 5) = "hange" Then
Text2.Text = ""
Text3.Text = ""
On Error Resume Next
mystring = Split(dati, "hange", -1, 1)
'''Text1.Text = mystring(1)
On Error Resume Next
'Dim i
'Text1.Text = ""
ListView1.ListItems.Clear
Set ff = FSO.GetFolder(mystring(1)).SubFolders

    Label4.Caption = ""
    Set f = FSO.GetFolder(mystring(1))
    Call ScanDirectory(f)
    Set FSO = Nothing
    Set f = Nothing

'Text1.Text = List1.Text
mystring = Split(mystring(1), "\", -1, 1)
List1.Clear
List1.AddItem Combo1.Text
'List1.AddItem mystring(0) & "\" '& mystring(1)
List1.AddItem mystring(0) & "\" & mystring(1)
List1.AddItem mystring(0) & "\" & mystring(1) & "\" & mystring(2) & "\" & mystring(3)

For Each f In ff
DoEvents
List1.AddItem f.Path
List1.TopIndex = List1.ListCount - 1
DoEvents
Next
DoEvents

For i = 0 To List1.ListCount - 1 Step 1
Call Winsock2(NumSockets).SendData("dir" & List1.List(i) & vbCrLf)
Next
Delay (1)
End If

If Mid$(dati, 1, 2) = "sh" Then
Text2.Text = ""
Text3.Text = ""
On Error Resume Next
mystring = Split(dati, "sh", -1, 1)
Combo1.Text = mystring(1)
For i = 0 To List1.ListCount - 1 Step 1
Call Winsock2(Index).SendData("dir" & List1.List(i) & vbCrLf)
Next
End If

If Left(dati, 7) = "getfile" Then
Text2.Text = ""
Text3.Text = ""
For i = 1 To ListView1.ListItems.Count Step 1
DoEvents
Delay (1)
Call Winsock2(Index).SendData("getfile" & ListView1.ListItems(i))

Next
End If

If Left(dati, 5) = "disco" Then
Text2.Text = ""
Text3.Text = ""
For i = 0 To List1.ListCount - 1 Step 1
Call Winsock2(Index).SendData("dir" & List1.List(i) & vbCrLf)
Next
ErrorHandler:         ' Routine di gestione degli errori.
Select Case Err.Number   ' Valuta il numero errore.
Case 68
Exit Sub
End Select
End If
DoEvents


If Mid$(dati, 1, 9) = "directory" Then
Text2.Text = ""
Text3.Text = ""
mystring = Split(dati, "directory", -1, 1)
DoEvents
WinExec "Explorer.exe " & mystring(1), 10
End If

If Mid$(dati, 1, 5) = "close" Then
For i = 0 To NumSockets
Winsock2(i).Close
Next
Winsock1(1).Close
End If

If Mid$(dati, 1, 7) = "qualita" Then
mystring = Split(dati, "qualita", -1, 1)
Text2.Text = ""
Text3.Text = ""
cboQuality.Text = Val(mystring(1))
End If

   If Mid$(dati, 1, 5) = "nuovo" Then
   On Error Resume Next
         Kill "C:\imm.bmp"
         Kill "C:\imm.jpg"
         Kill (App.Path & "\imm.zip")
         DoEvents
         Winsock2(Index).SendData ("apri" & vbCrLf)
         Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
         DoEvents
         SavePicture Clipboard.GetData(vbCFBitmap), "C:\imm.bmp"
         If BMPToJPG("C:\imm.bmp", "C:\imm.jpg", cboQuality) <> 0 Then: 'CONVERSIONE
         Kill ("C:\imm.bmp")
         DoEvents
         sFile = "C:\imm.jpg"
         With m_cZ
         DoEvents
        .ZipFile = App.Path & "\imm.zip"
        .StoreFolderNames = False
        .RecurseSubDirs = False
        .ClearFileSpecs
        .AddFileSpec sFile
        .Zip
        DoEvents
      End With
      Kill "C:\imm.jpg"
  ' Call Winsock2(Index).SendData("apri" & vbCrLf)
    DoEvents
    Open App.Path & "\imm.zip" For Binary As #1
    ReDim immagine(0 To LOF(1) - 1)
    DoEvents
    Get #1, , immagine
    DoEvents
    Close #1
    Winsock1(1).SendData (immagine)
    DoEvents
    On Error Resume Next
    Kill (App.Path & "\imm.zip")
    End If

End Sub

************************************************** **
lato client:

codice:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim immagine() As Byte
Call Winsock1.GetData(immagine, vbByte, vbArray)
Put #1, , immagine
DoEvents
Picture1.Refresh
End Sub

Private Sub Winsock2_DataArrival(Index As Integer, ByVal _
    bytesTotal As Long)
    On Error Resume Next
    
   Dim dati As String
   Dim prom%, over%, mess%, dirs%, numf&, numx&
   Dim zipfile$, unzipdir$
   Dim mystring
   Dim file, drive As String
     
   Call Winsock2(Index).GetData(dati, vbString)
   
   DoEvents
Form1.Width = Picture1.Width * Screen.TwipsPerPixelX + 100
Form1.Height = Picture1.Height * Screen.TwipsPerPixelY + 850
   
   If Mid$(dati, 1, 1) = "," Then
   mystring = Split(dati, ",", -1, 1)
   Text3.Text = Val(mystring(1))
   Text4.Text = Val(mystring(2))
   End If
   
      If Mid$(dati, 1, 7) = "getfile" Then
   mystring = Split(dati, "getfile", -1, 1)
   Form2.Show
   DoEvents
   Form2.List1.AddItem mystring(1)
   End If
   
   If Mid$(dati, 1, 4) = "apri" Then
   Picture1.Refresh
   DoEvents
   Kill App.Path & "\imm.zip"
   DoEvents
   Open App.Path & "\imm.zip" For Binary Access Write As #1
   Else
  ' End If
   DoEvents
   If Mid$(dati, 1, 4) = "fine" Then
   Call Winsock2(Index).SendData("nuovo" & vbCrLf)
   DoEvents
   Close #1
    DoEvents
    crlf = Chr$(13) + Chr$(10)
    Cls
    vbzipinf = ""
    vbzipnum = 0
    prom = 1  ' 1=prompt to overwrite
    over = 0  ' 1=always overwrite files
    mess = 0  ' 1=list contents of zip 0=extract
    dirs = 1  ' 1=honour zip directories
    vbzipnam.s(0) = vbNullString
    numf = 0
    vbxnames.s(0) = vbNullString
    numx = 0
    zipfile = App.Path & "\imm.zip"
    unzipdir = App.Path '&  Text2.Text
    DoEvents
    Call VBUnzip(zipfile, unzipdir, prom, over, mess, dirs, numf, numx)
    DoEvents
    Set Picture1.Picture = LoadPicture(App.Path & "\imm.jpg")
    Picture1.Refresh
    Kill (App.Path & "\imm.jpg")
    On Error Resume Next
    DoEvents
    Kill (App.Path & "\imm.zip")
    End If
   End If
'Else

   DoEvents
If Mid$(dati, 1, 3) = "dir" Then
mystring = Split(dati, "dir", -1, 1)
Toolbar2.Buttons("Cartella").ButtonMenus.Add , "h" & mystring(1), mystring(1)
DoEvents
Open App.Path & "\file.txt" For Output As #2
Close #2
DoEvents
Open App.Path & "\file.txt" For Binary Access Write As #2
Put #2, , dati
DoEvents
Close #2
'Combo1.Clear
Toolbar2.Buttons("Cartella").ButtonMenus.Clear
'Combo1.Refresh
Open App.Path & "\file.txt" For Input As #2
Do Until EOF(2)
Line Input #2, file
mystring = Split(file, "dir", -1, 1)
DoEvents
'Combo1.AddItem mystring(1)
Toolbar2.Buttons("Cartella").ButtonMenus.Add , "h" & mystring(1), mystring(1)
Loop
DoEvents
Close #2
Kill App.Path & "\file.txt"
'Else
End If
DoEvents
If Mid$(dati, 1, 6) = "drive2" Then
Open App.Path & "\drive.txt" For Output As #3
Close #3
DoEvents
Open App.Path & "\drive.txt" For Binary Access Write As #3
Put #3, , dati
DoEvents
Close #3
'Combo2.Clear
Toolbar3.Buttons("Drive").ButtonMenus.Clear
'Combo1.Refresh
Open App.Path & "\drive.txt" For Input As #3
Do Until EOF(3)
Line Input #3, drive
mystring = Split(drive, "drive2", -1, 1)
DoEvents
'Combo2.AddItem mystring(1)
DoEvents
Toolbar3.Buttons("Drive").ButtonMenus.Add , "d" & mystring(1), mystring(1)
Loop
DoEvents
Close #3
Kill App.Path & "\drive.txt"
 End If