Code on Client winsock arrival which call for screenshot command and send file back to server when done taking screenshot
n is declared as static
fName_Only as string
Code:Case "#[SCREENSHOT]#" n = n + 1 If ws.State <> sckClosed Then FName_Only = App.Path & "\ss" & "-" & n & ".jpg" TakeSS FName_Only, 1 Lbl_FileSize.Caption = "Filesize: " & FileLen(FName_Only$) Lbl_FileName.Caption = GetFileName(FName_Only) SendSSFile FName_Only End If Case "#[FORCEOFF]#"
Code:Private Sub SendSSFile(ssFiles As String) On Error GoTo Error_Handler Dim StartTime As Long Dim OpenedFileNbr, FileLength, Back Dim Temp As String Dim PackageSize As Long Dim LastData As Boolean FileLength = FileLen(ssFiles) FileBar.Max = FileLength FileBar.Value = 0 ws.SendData "#[CMD]#" & "~" & "#[SCREENSHOT]#" & "~" & "#[OPENFILE]#" & "~" & Lbl_FileName.Caption & "~" & FileLength & "~" & "" StartTime = Timer Do While NextPart = False And Timer - StartTime < 30 '# When the next Package where not send the procedure will quit after 30 secs timeout DoEvents Loop If Timer - StartTime > 30 Then GoTo TimeOut '# When Timeout PackageSize = 2048 '# Declare the size of the packages to send 'On Error GoTo ErrorHandler LastData = False '# You'll see that we need that to make the received ' file excactly the same size like the original one NextPart = True '# NextPart is a form-global variable which ' contains wheter the package was send or not ' take a look at the winsock_sendcomplete event OpenedFileNbr = FreeFile '# Find a free Filenumber to open your file Open ssFiles For Binary Access Read As OpenedFileNbr Temp = "" Do While Not EOF(OpenedFileNbr) ' Adjust PackageSize at end so we don't read too much data If FileLength - Loc(OpenedFileNbr) <= PackageSize Then PackageSize = FileLength - Loc(OpenedFileNbr) + 1 LastData = True End If Temp = Space$(PackageSize) '# Make string empty for data Get OpenedFileNbr, , Temp '# Load data into string If ws.State <> 7 Then GoTo Error_Exit '# Checks again wether the connections exist or not On Error Resume Next StartTime = Timer Do While NextPart = False And Timer - StartTime < 30 '# When the next Package where not send the procedure will quit after 30 secs timeout DoEvents Loop If Timer - StartTime > 30 Then GoTo TimeOut '# When Timeout If ws.State = 7 Then '# Check state again If LastData = True Then Temp = Mid(Temp, 1, Len(Temp) - 1) '# We added one byte above, which we don't wanna send ' therefore we need lastdata End If FileBar.Value = FileBar.Value + Len(Temp) Lbl_Complete.Caption = "Complete: " & Int(100 / FileLength * FileBar.Value) & " %" DoneBytes = DoneBytes + Len(Temp) ws.SendData Temp NextPart = False '# Set the senddata check Else GoTo Error_Exit End If Loop Working (2000) Close #OpenedFileNbr '# Last package was send, now you can close the file FileBar.Value = 0 Do While NextPart = False '# You have to wait until the sendprogress is done because DoEvents ' when we close the winsock before the file was send completly Loop ' data will be lost --> We use the close event in the client to ' close the received file too ws.SendData "#[CMD]#" & "~" & "#[SCREENSHOT]#" & "~" & "#[CLOSEFILE]#" & "~" & "" GoTo Error_Exit TimeOut: '' MsgBox "Time Out!!!", vbExclamation + vbOKOnly, "Error" GoTo Error_Exit Error_Exit: Exit Sub Error_Handler: MsgBox "Err Description: " & Err.Description & vbNewLine _ & "Err Number: " & Err.Number & vbNewLine _ & "Err Source: " & Err.Source, vbCritical + vbOKOnly, "Error" GoTo Error_Exit End Sub
Server Code
May problem is that for example filesize is 224kb... the server only received up to 222kb it always lack of 2kb. File is incomplete so I can't display the picture that I taken from he client.Code:Dim DownloadingFile As Integer '# freefile for open files Dim DoneRec As Long '# for calculating kbps Dim Fname As String 'Initialize Variable sData = "" 'Data Arrival inform of x '=================================================== Socket.GetData sData, vbString If Left(sData, 7) = "#[CMD]#" Then sTemp = Split(sData, "~") Select Case sTemp(1) Case "#[SCREENSHOT]#" Select Case sTemp(2) Case "#[CLOSEFILE]#" Close #DownloadingFile Working (3000) frmMain.sb1.Panels(1).Text = "Done taking screenshot..." frmMain.ProgressBar1.Visible = False Load frmScreenShot frmScreenShot.Show 1, frmMain Case "#[OPENFILE]#" frmMain.ProgressBar1.Visible = True Fname$ = sTemp(3) frmMain.ProgressBar1.Max = sTemp(4) DownloadingFile = FreeFile Open App.Path & "\images\" & Fname$ For Binary Access Write As #DownloadingFile strFiles = Fname$ End Select Else frmMain.ProgressBar1.Value = frmMain.ProgressBar1.Value + bytesTotal DoneRec = DoneRec + bytesTotal frmMain.sb1.Panels(1) = "Complete: " & Int(100 / frmMain.ProgressBar1.Max * frmMain.ProgressBar1.Value) & " %" Put #DownloadingFile, , sData DoEvents '' Debug.Print Len(sData) End If
by the way this not my code I just download it from pscode and modify it to suit my needs. tnx to Ronny R. Germany Berlin


Reply With Quote
