|
在Visual Basic.NET 2002中进行调用。你会‘将数据移动8位。在Visual Basic .NET 2002中,你必须‘这个数乘以2的8次方‘端口=parts(4)*(2^8)‘进行调用,并且接着以Visual Basic .NET 2003进行注释当前行。port = parts(4) 0) Then ‘发送一个FTP命令重新启动 SendCommand("REST " & offset) If (m_iRetValue 350) Then offset = 0 End If End If If (offset > 0) Then npos = output.Seek(offset, SeekOrigin.Begin) End IfEnd If‘发送一个FTP命令重新找到一个文件。SendCommand("RETR " & sFileName)If (Not (m_iRetValue = 150 Or m_iRetValue = 125)) Then MessageString = m_sReply Throw New IOException(m_sReply.Substring(4))End IfDo While (True) m_aBuffer.Clear(m_aBuffer, 0, m_aBuffer.Length) m_iBytes = cSocket.Receive(m_aBuffer, m_aBuffer.Length, 0) output.Write(m_aBuffer, 0, m_iBytes) If (m_iBytes 0) Then SendCommand("REST " & offset) If (m_iRetValue 350) Then ‘远程服务器可能不支持恢复。 offset = 0 End IfEnd If‘发送一个FTP命令,存储一个文件。 SendCommand("STOR " & Path.GetFileName(sFileName))If (Not (m_iRetValue = 125 Or m_iRetValue = 150)) Then MessageString = m_sReply Throw New IOException(m_sReply.Substring(4))End If‘在上载之前,检查文件是否存在。bFileNotFound = FalseIf (File.Exists(sFileName)) Then ‘打开输入流读取源文件 input = New FileStream(sFileName, FileMode.Open) If (offset 0) Then input.Seek(offset, SeekOrigin.Begin) End If ‘上载这个文件 m_iBytes = input.Read(m_aBuffer, 0, m_aBuffer.Length) Do While (m_iBytes > 0) cSocket.Send(m_aBuffer, m_iBytes, 0) m_iBytes = input.Read(m_aBuffer, 0, m_aBuffer.Length) Loop input.Close()Else bFileNotFound = TrueEnd IfIf (cSocket.Connected) Then cSocket.Close()End If‘如果找不到文件,检查返回值If (bFileNotFound) Then MessageString = m_sReply Throw New IOException("The file: “& sFileName & " was not found. " & _"Cannot upload the file to the FTP site")End IfReadReply()If (Not (m_iRetValue = 226 Or m_iRetValue = 250)) Then MessageString = m_sReply Throw New IOException(m_sReply.Substring(4))End IfEnd Sub‘从远程FTP服务器上删除一个文件。Public Function DeleteFile(ByVal sFileName As String) As Boolean Dim bResult As Boolean bResult = True If (Not (m_bLoggedIn)) Then Login() End If ‘发送一个FTP命令,删除一个文件。 SendCommand("DELE " & sFileName) If (m_iRetValue 250) Then bResult = False MessageString = m_sReply End If‘返回最终结果 Return bResultEnd Function‘在远程FTP服务器上重命名一个文件Public Function RenameFile(ByVal sOldFileName As String, _ByVal sNewFileName As String) As Boolean Dim bResult As Boolean bResult = True If (Not (m_bLoggedIn)) Then Login() End If ‘发送一个FTP命令,对一个文件重命名 SendCommand("RNFR " & sOldFileName) If (m_iRetValue 350) Then MessageString = m_sReply Throw New IOException(m_sReply.Substring(4)) End If ‘发送一个FTP命令,对一个文件更改为新名称 ‘如果新的文件名存在,会被覆盖。 SendCommand("RNTO " & sNewFileName) If (m_iRetValue 250) Then MessageString = m_sReply Throw New IOException(m_sReply.Substring(4)) End If ‘返回最终结果 Return bResultEnd Function‘这是一个在远程服务器上创建目录的函数Public Function CreateDirectory(ByVal sDirName As String) As Boolean Dim bResult As Boolean bResult = True If (Not (m_bLoggedIn)) Then Login() End If ‘发送一个FTP命令,在FTP服务器上制作一个目录 SendCommand("MKD " & sDirName) If (m_iRetValue 257) Then bResult = False MessageString = m_sReply End If ‘返回最终结果 Return bResultEnd Function‘这是一个在远程FTP服务器上删除目录的函数Public Function RemoveDirectory(ByVal sDirName As String) As Boolean Dim bResult As Boolean bResult = True ‘检查是否已登录FTP服务器 If (Not (m_bLoggedIn)) Then Login() End If ‘发送一个FTP命令,删除在FTP服务器上的目录 SendCommand("RMD " & sDirName) If (m_iRetValue 250) Then bResult = False MessageString = m_sReply End If ‘返回最终结果 Return bResultEnd Function‘这是一个用来在远程FTP服务器上改变当前工作目录的函数。Public Function ChangeDirectory(ByVal sDirName As String) As Boolean Dim bResult As Boolean bResult = True ‘检查你是否在根目录 If (sDirName.Equals(".")) Then Exit Function End If ‘检查是否已登录FTP服务器 If (Not (m_bLoggedIn)) Then Login() End If ‘发送FTP命令,改变在FTP服务器上的目录。 SendCommand("CWD " & sDirName) If (m_iRetValue 250) Then bResult = False MessageString = m_sReply End If Me.m_sRemotePath = sDirName ‘返回最终结果 Return bResultEnd Function‘关闭远程服务器的FTP链接Public Sub CloseConnection() If (Not (m_objClientSocket Is Nothing)) Then ‘发送一个FTP命令,结束FTP服务系统。 SendCommand("QUIT") End If Cleanup()End Sub#End Region#Region "Private Subs and Functions"‘从FTP服务器得到回应。Private Sub ReadReply() m_sMes = "" m_sReply = ReadLine() m_iRetValue = Int32.Parse(m_sReply.Substring(0, 3))End Sub‘清除一些变量Private Sub Cleanup() If Not (m_objClientSocket Is Nothing) Then m_objClientSocket.Close() m_objClientSocket = Nothing End If m_bLoggedIn = FalseEnd Sub‘从FTP服务器读取一行。Private Function ReadLine(Optional ByVal bClearMes As Boolean = False) As String Dim seperator As Char = ControlChars.Lf Dim mess() As String If (bClearMes) Then m_sMes = "" End If Do While (True) m_aBuffer.Clear(m_aBuffer, 0, BLOCK_SIZE) m_iBytes = m_objClientSocket.Receive(m_aBuffer, m_aBuffer.Length, 0) m_sMes += ASCII.GetString(m_aBuffer, 0, m_iBytes) If (m_iBytes < m_aBuffer.Length) Then Exit Do End If Loop mess = m_sMes.Split(seperator) If (m_sMes.Length > 2) Then m_sMes = mess(mess.Length - 2) Else m_sMes = mess(0) End If If (Not (m_sMes.Substring(3, 1).Equals(" "))) Then Return ReadLine(True) End If Return m_sMesEnd Function‘这是一个你想链接的FTP服务器用于发送命令的函数。Private Sub SendCommand(ByVal sCommand As String) sCommand = sCommand & ControlChars.CrLf Dim cmdbytes As Byte() = ASCII.GetBytes(sCommand) m_objClientSocket.Send(cmdbytes, cmdbytes.Length, 0) ReadReply()End Sub‘创建一个数据包 Private Function CreateDataSocket() As SocketDim index1, index2, len As Int32Dim partCount, i, port As Int32Dim ipData, buf, ipAddress As StringDim parts(6) As Int32Dim ch As CharDim s As SocketDim ep As IPEndPoint‘发送一个FTP命令,用于被动数据链接SendCommand("PASV")If (m_iRetValue 227) Then MessageString = m_sReply Throw New IOException(m_sReply.Substring(4))End Ifindex1 = m_sReply.IndexOf("(")index2 = m_sReply.IndexOf(")")ipData = m_sReply.Substring(index1 + 1, index2 - index1 - 1)len = ipData.LengthpartCount = 0buf = ""For i = 0 To ((len - 1) And partCount |
|