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

