关于FTP服务器程序的编撰
关于FTP服务器程序的编写
本帖最后由 sxlhl365 于 2011-07-15 15:20:13 编辑 想做一个简单的FTP服务器,只要有上传、下载、列举文件等基本功能,现在正在起始阶段,只做了一个FORM,放了一个winsock控件,调试时,打开FTP文件夹,发现程序进行到PASV这一步后就没反馈了,这时在FTP文件夹窗口出现错误“打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:无法与服务器建立连接”。请高手们指点。
Private Sub Form_Load()
Winsock1.LocalPort = 9003
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
Send "220 hello!"
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim s, args(1) As String, i As Integer
Winsock1.GetData s, vbString
Do While Right(s, 1) = Chr(13) Or Right(s, 1) = Chr(10)
s = Left(s, Len(s) - 1)
Loop
i = InStr(1, s, " ")
If i > 0 Then
args(0) = Left(s, i - 1)
args(1) = Right(s, Len(s) - i)
Else
args(0) = s
End If
Select Case UCase(args(0))
Case "USER"
Send "331 Password required for " & args(1)
Case "PASS"
If args(1) = "IEUser@" Then
Send "230 User successfully logged in."
Else
Send "530 Not logged in, user or password incorrect!"
End If
Case "SYST"
Send "215 Hello"
Case "PWD"
Send "257 " & Chr(34) & "/" & Chr(34) & " is current directory."
Case "TYPE"
Send "200 Type set to " & args(1)
Case "CWD"
DoChangeDirectory args(1)
Case "PASV"
Send "227 Entering Passive Mode (" & Winsock1.LocalIP & "," & Fix(9003 / 256) & "," & 9003 Mod 256 & ")."
Case Else
Send "502 Command not implemented."
End Select
End Sub
Private Sub Send(s As String)
On Error Resume Next
Winsock1.SendData Trim(s) & vbNewLine
Sleep 0
End Sub
Private Function DoChangeDirectory(dir As String) As Integer
Dim CurrentDir As String
Dim Path As String, Root As String, i As Integer
CurrentDir = "d:/software/"
本帖最后由 sxlhl365 于 2011-07-15 15:20:13 编辑 想做一个简单的FTP服务器,只要有上传、下载、列举文件等基本功能,现在正在起始阶段,只做了一个FORM,放了一个winsock控件,调试时,打开FTP文件夹,发现程序进行到PASV这一步后就没反馈了,这时在FTP文件夹窗口出现错误“打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹。详细信息:无法与服务器建立连接”。请高手们指点。
Private Sub Form_Load()
Winsock1.LocalPort = 9003
Winsock1.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
Send "220 hello!"
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim s, args(1) As String, i As Integer
Winsock1.GetData s, vbString
Do While Right(s, 1) = Chr(13) Or Right(s, 1) = Chr(10)
s = Left(s, Len(s) - 1)
Loop
i = InStr(1, s, " ")
If i > 0 Then
args(0) = Left(s, i - 1)
args(1) = Right(s, Len(s) - i)
Else
args(0) = s
End If
Select Case UCase(args(0))
Case "USER"
Send "331 Password required for " & args(1)
Case "PASS"
If args(1) = "IEUser@" Then
Send "230 User successfully logged in."
Else
Send "530 Not logged in, user or password incorrect!"
End If
Case "SYST"
Send "215 Hello"
Case "PWD"
Send "257 " & Chr(34) & "/" & Chr(34) & " is current directory."
Case "TYPE"
Send "200 Type set to " & args(1)
Case "CWD"
DoChangeDirectory args(1)
Case "PASV"
Send "227 Entering Passive Mode (" & Winsock1.LocalIP & "," & Fix(9003 / 256) & "," & 9003 Mod 256 & ")."
Case Else
Send "502 Command not implemented."
End Select
End Sub
Private Sub Send(s As String)
On Error Resume Next
Winsock1.SendData Trim(s) & vbNewLine
Sleep 0
End Sub
Private Function DoChangeDirectory(dir As String) As Integer
Dim CurrentDir As String
Dim Path As String, Root As String, i As Integer
CurrentDir = "d:/software/"