写了一个FTP上传程序,为什么没有返回 226 Transfer complete.?
服务器返回:
220 ProFTPD 1.2.10 Server [***.***.***.***]
331 Password required for ***.
230 User *** logged in.
227 Entering Passive Mode (***,***,***,***,***,***).
150 Opening ASCII mode data connection for aaa.txt
已经确认文件上传成功了
********************
源程序如下
Dim downorup As String
Private Sub Form_Load()
Winsock1.Connect "***.***.***.***", 21
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
Winsock1.GetData strData
Text1.Text = Text1.Text & vbCrLf & strData
If Left(strData, 3) = "220" Then '若命令连接成功
Login '登录
End If
If Left(strData, 3) = "227" Then '若成功进入PASV方式
MakeDataConnection strData '建立数据连接
End If
End Sub
Private Sub Login()
Winsock1.SendData "USER *****" & vbCrLf '发送用户名
Winsock1.SendData "PASS *****" & vbCrLf '发送密码
End Sub
Private Sub Setpasv()
Winsock1.SendData "PASV" & vbCrLf '设置PASV方式
End Sub
Private Sub upload_Click()
downorup = "up"
Setpasv
End Sub
Private Sub Winsock2_Connect()
If downorup = "up" Then '上传文件,数据连接建立后发送数据
Dim a As String
Dim MyString As String
Open "aaa.txt" For Input As #1
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)
Winsock2.GetData strData
Text1.Text = Text1.Text & vbCrLf & strData
End Sub
Private Sub MakeDataConnection(sData As String)
Dim iPos As Integer, iPos2 As Integer
Dim strDataAddress
iPos = InStr(1, sData, "(") + 1 '获取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 Winsock2.State <> 0 Then
Winsock2.Close
End If
Winsock2.Connect strDataAddress, inPort
End Sub
Private Sub Winsock2_SendComplete()
Winsock1.SendData "TYPE ASCII" & vbCrLf
Winsock1.SendData "STRU record-structure" & vbCrLf
Winsock1.SendData "STOR aaa.txt" & vbCrLf
End Sub