写了一个FTP上传程序,为什么没有返回 226 Transfer complete.?

benjamin8064 benjamin8064 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
服务器返回:

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
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
benjamin8064
网络编程 1,502 成员 18,427 内容