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

benjamin8064 2006-10-18 08:22:42
服务器返回:

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
...全文
490 点赞 收藏 6
写回复
6 条回复
fengyaner 2006年10月25日
同样的问题,无法解决呢。楼上的解决了吗?
回复 点赞
benjamin8064 2006年10月24日
回复 点赞
leongwong 2006年10月22日
关注!
回复 点赞
benjamin8064 2006年10月21日
另外,我测了一下这个程序
如果我上传文件后,立即发list命令,会报
425 Try later, data connection in use.
而当我再发pasv命令后,才会返回
227 Entering Passive Mode (***,***,***,***,***,***)

226 Transfer complete.
回复 点赞
Dunzip 2006年10月19日
没有信息返回的原因很多阿,自己先从简单的调试,看看那里出了问题。
回复 点赞
benjamin8064 2006年10月19日
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

1145

社区成员

1.8w+

社区内容

VB 网络编程
社区公告
暂无公告