VB projects - File transfer
Description: simple file transfer using Winsock control
Minimum requirements: VB5 Pro
Download: source code
Client
Screenshot:

Project: Standard EXE
ActiveX Controls/Objects: comdlg32.ocx, MSWINSCK.OCX
Controls: wsTCP (Winsock), cmdSend (CommandButton), dlg (CommonDialog), cmdBrowse (CommandButton), txtFile (TextBox), lblStatus (Label)
Code:
Option Explicit
Dim buffer() As Byte
Dim lBytes As Long
Dim temp As String
Private Sub cmdBrowse_Click()
dlg.ShowOpen
txtFile = dlg.FileName
End Sub
Private Sub cmdSend_Click()
cmdSend.Enabled = False
lBytes = 0
ReDim buffer(FileLen(dlg.FileName) - 1)
Open dlg.FileName For Binary As 1
Get #1, 1, buffer
Close #1
Load wsTCP(1)
wsTCP(1).RemoteHost = "localhost"
wsTCP(1).RemotePort = 1111
wsTCP(1).Connect
lblStatus = "Connecting..."
End Sub
Private Sub wsTCP_Close(Index As Integer)
lblStatus = "Connection closed"
Unload wsTCP(1)
End Sub
Private Sub wsTCP_Connect(Index As Integer)
lblStatus = "Connected"
wsTCP(1).SendData dlg.FileTitle & vbCrLf
End Sub
Private Sub wsTCP_DataArrival(Index As Integer, ByVal bytesTotal As Long)
wsTCP(1).GetData temp
If InStr(temp, vbCrLf) <> 0 Then temp = Left(temp, InStr(temp, vbCrLf) - 1)
If temp = "OK" Then
wsTCP(1).SendData buffer
Else
lblStatus = "Something wrong"
Unload wsTCP(1)
cmdSend.Enabled = True
End If
End Sub
Private Sub wsTCP_SendComplete(Index As Integer)
If temp = "OK" Then
lblStatus = "Send complete"
temp = ""
Unload wsTCP(1)
cmdSend.Enabled = True
End If
End Sub
Private Sub wsTCP_SendProgress(Index As Integer, ByVal bytesSent As Long, ByVal bytesRemaining As Long)
If temp = "OK" Then
lBytes = lBytes + bytesSent
lblStatus = lBytes & " out of " & UBound(buffer) & " bytes sent"
End If
End Sub
Server
Screenshot:

Project: Standard EXE
Controls: Frame1 (Frame), Dir1 (DirListBox), Drive1 (DriveListBox), cmdRun (CommandButton), wsTCP (Winsock)
Code:
Option Explicit
Dim lPos As Long
Dim bOK As Boolean
Dim fname As String
Private Sub cmdRun_Click()
If cmdRun.Caption = "Run" Then
cmdRun.Caption = "Stop"
wsTCP(0).LocalPort = 1111
wsTCP(0).Listen
Else
wsTCP(0).Close
cmdRun.Caption = "Run"
End If
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive & "\"
End Sub
Private Sub wsTCP_Close(Index As Integer)
Close #1
Unload wsTCP(1)
bOK = False
End Sub
Private Sub wsTCP_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load wsTCP(1)
wsTCP(1).Accept requestID
End Sub
Private Sub wsTCP_DataArrival(Index As Integer, ByVal bytesTotal As Long)
If Not bOK Then
wsTCP(1).GetData fname
If InStr(fname, vbCrLf) <> 0 Then fname = Left(fname, InStr(fname, vbCrLf) - 1)
bOK = True
If Dir(Dir1.Path & "\" & fname) <> "" Then Kill Dir1.Path & "\" & fname
Open Dir1.Path & "\" & fname For Binary As 1
lPos = 1
wsTCP(1).SendData "OK" & vbCrLf
Else
Dim buffer() As Byte
wsTCP(1).GetData buffer
Put #1, lPos, buffer
lPos = lPos + UBound(buffer) + 1
End If
End Sub
|