Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
If Left(strData, 3) = \ ‘若命令连接成功
Login ’登录
End If
If Left(strData, 3) = \ ‘若成功进入PASV方式
MakeDataConnection strData ‘建立数据连接
End If
End Sub
Private Sub Login()
Winsock1.SendData \ ‘发送用户名
Winsock1.SendData \ ‘发送密码
End Sub
Private Sub Setpasv()
Winsock1.SendData \ ‘设置PASV方式
End Sub
Private Sub download_Click()
ChDir \ ‘改变客户端工作目录
Winsock1.SendData \ ‘改变服务器工作目录
Setpasv
Winsock1.SendData \ ‘下载
End Sub
Private Sub upload_Click()
downorup = \
Setpasv
End Sub
Private Sub Winsock2_Connect()
If downorup = \ ‘上传文件,数据连接建立后发送数据
Dim a As String
Dim MyString As String
ChDir \
Open \
Do While Not EOF(1)
Line Input #1, a
MyString = MyString + a + Chr(13) + Chr(10)
Loop
Close #1
Winsock2.SendData MyString & vbCrLf
End If
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim strData As String ‘服务器从数据连接传来下载文件的数据时,保存到本地文件系统中
Winsock2.GetData strData
ChDir \
Open \
Print #1, strData
Close #1
End Sub
Private Sub MakeDataConnection(sData As String)
Dim iPos As Integer, iPos2 As Integer
Dim strDataAddress
iPos = InStr(1, sData, \ ‘获取IP地址
For i = 1 To 4
iPos2 = InStr(iPos, sData, \
strDataAddress = strDataAddress & Mid(sData, iPos, iPos2 - iPos) & \
iPos = iPos2 + 1
Next
strDataAddress = Left(strDataAddress, Len(strDataAddress) - 1)
Dim i1 As Single, i2 As Single, inPort As Single ‘计算端口号
iPos = iPos2 + 1
iPos2 = InStr(iPos, sData, \
i1 = CSng(Mid(sData, iPos, iPos2 - iPos))
iPos = iPos2 + 1
iPos2 = InStr(iPos, sData, \
i2 = CSng(Mid(sData, iPos, iPos2 - iPos))
inPort = i1 * 256 + i2
If Not Winsock2.State = sckConnected Then
Winsock2.Close
End If
Winsock2.Connect strDataAddress, inPort
End Sub
Private Sub Winsock2_SendComplete()
ChDir \ ‘上传文件数据通过数据连接发送完后,通知服务器接收并保存到其文件系统中
Winsock1.SendData \
Winsock1.SendData \
Winsock1.SendData \
Winsock1.SendData \
End Sub
该程序在Windown 98下通过Micosoft Visual Basic 5.0编译执行成功,服务器是运行在Windown 98下的Seuver-U FTP软件。对其他不同文件系统间的FTP,应根据RFC 959文档对程序进行适当的修改,这里不再叙述。
四 结束语
在铁路各信息系统中,数据的传输是其中重要的一部分。有些系统在总体设计和编程时没有充分考虑数据传输部分,通过安装FTP软件用手工方式进行数据传输,不但降低了效率,还会出现数据漏传,丢失等现象。在总体设计充分考虑数据传输部分,并在编程时将FTP内嵌到应用程序中,这样可以提高传输效率和质量。