1. 程式人生 > >FTP伺服器連線及狀態--vb.net

FTP伺服器連線及狀態--vb.net

程式碼有註解。看不懂請留言。

Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Text

Public Class Form1
    Private timeoutObject As ManualResetEvent
    Private ssocket As Socket
    Private isConn As Boolean

    
    Public Function CheckFtp(ByVal ip As String, ByVal ftpuser As String, ByVal ftppas As String, ByRef errmsg As String, Optional port As Integer = 21, Optional timeout As Integer = 2000) As Boolean
        '*********輸入資料檢查開始*********
        If ftpuser.Trim.Length = 0 Then
            errmsg = "FTP使用者名稱不能為空,請檢查設定!"
            Return False
        End If
        If ftppas.Trim.Length = 0 Then
            errmsg = "FTP密碼不能為空,請檢查設定!"
            Return False
        End If

        Dim address As IPAddress = Nothing

        Try
            address = IPAddress.Parse(ip)
        Catch ex As Exception
            errmsg = String.Format("FTP伺服器IP:{0}解析失敗,請檢查是否設定正確!", ip)
            Return False
        End Try
        '*********輸入資料檢查結束*********
        isConn = False
        Dim ret As Boolean = False
        Dim result(1024) As Byte
        '連線返回,使用者名稱返回,密碼返回,退出返回
        Dim pingStatus As Integer = 0
        Dim userStatus As Integer = 0
        Dim pasStatus As Integer = 0
        Dim exitStatus As Integer = 0

        timeoutObject = New ManualResetEvent(False)
        Try
            Dim receivelength As Integer
            ssocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            ssocket.SendTimeout = timeout
            ssocket.ReceiveTimeout = timeout

            Try
                ssocket.BeginConnect(New IPEndPoint(address, port), New AsyncCallback(AddressOf callBackMethod), ssocket)
                If timeoutObject.WaitOne(timeout, False) = False Then '阻止當前執行緒
                    ssocket.Close()
                    ssocket = Nothing
                    pingStatus = -1 '超時返回狀態碼-1,並返回false值
                End If
                If isConn = True Then '連線狀態
                    pingStatus = 200
                Else
                    pingStatus = -1
                End If
            Catch ex As Exception
                pingStatus = -1
            End Try

            If pingStatus = 200 Then '狀態碼200 - TCP連線成功
                receivelength = ssocket.Receive(result)
                pingStatus = getFtpReturnCode(result, receivelength) ' 連線狀態
                If pingStatus = 220 Then '狀態碼220 - FTP返回歡迎語
                    ssocket.Send(Encoding.Default.GetBytes(String.Format("{0}{1}", "USER " + ftpuser, Environment.NewLine)))
                    receivelength = ssocket.Receive(result)
                    userStatus = getFtpReturnCode(result, receivelength)
                    If userStatus = 331 Then
                        ssocket.Send(Encoding.Default.GetBytes(String.Format("{0}{1}", "PASS " + ftppas, Environment.NewLine)))
                        receivelength = ssocket.Receive(result)
                        pasStatus = getFtpReturnCode(result, receivelength)
                        If pasStatus = 230 Then
                            errmsg = String.Format("FTP:{0}@{1}登陸成功", ip, port)
                            ret = True
                            ssocket.Send(Encoding.Default.GetBytes(String.Format("{0}{1}", "QUIT", Environment.NewLine))) '登出FTP
                            receivelength = ssocket.Receive(result)
                            exitStatus = getFtpReturnCode(result, receivelength)
                        Else
                            errmsg = String.Format("FTP:{0}@{1}登陸失敗,使用者名稱或密碼錯誤({2})", ip, port, pasStatus) '狀態碼230的錯誤
                        End If
                    Else
                        errmsg = String.Format("使用使用者名稱:'{0}'登陸FTP:{1}@{2}時發生錯誤({3}),請檢查FTP是否正常配置!", ftpuser, ip, port, userStatus) '狀態碼331的錯誤
                    End If
                Else
                    errmsg = String.Format("FTP:{0}@{1}返回狀態錯誤({2}),請檢查FTP服務是否正常執行!", ip, port, pingStatus) '狀態碼220的錯誤
                End If
            Else
                errmsg = String.Format("無法連線FTP伺服器:{0}@{1},請檢查FTP服務是否啟動!", ip, port) '狀態碼200的錯誤
            End If
        Catch ex As Exception
            '連接出錯
            errmsg = String.Format("FTP:{0}@{1}連接出錯:", ip, port) + ex.Message
            'Common.logger(errmsg) '寫日誌
            ret = False
        Finally
            If ssocket IsNot Nothing Then
                ssocket.Close() '關閉socket
                ssocket = Nothing
            End If
        End Try
        Return ret
    End Function

    Private Sub callBackMethod(ByVal asyncResult As IAsyncResult)
        Try
            ssocket = asyncResult.AsyncState
            If ssocket IsNot Nothing Then
                ssocket.EndConnect(asyncResult)
                isConn = True
            End If
        Catch ex As Exception
            isConn = False
        Finally
            timeoutObject.Set()
        End Try
    End Sub
    ''' <summary>
    ''' 傳遞FTP返回的byte陣列和長度,返回狀態碼(Integer)
    ''' </summary>
    ''' <param name="retByte"></param>
    ''' <param name="retLen"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function getFtpReturnCode(ByVal retByte() As Byte, ByVal retLen As Integer) As Integer
        Try
            Dim str As String = Encoding.ASCII.GetString(retByte, 0, retLen).Trim
            MsgBox(Encoding.UTF8.GetString(retByte)) '檢視每次返回情況
            Return Integer.Parse(str.Substring(0, 3))
        Catch ex As Exception
            Return -1
        End Try
    End Function
End Class


相關推薦

FTP伺服器連線狀態--vb.net

程式碼有註解。看不懂請留言。 Imports System.IO Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Text Public Class

Visual C++網路程式設計經典案例詳解 第4章 FTP瀏覽器 登入FTP伺服器 連線FTP伺服器

在對FTP檔案進行相關處理之前 必須在成功連線 登入伺服器以後 才可以執行相關的操作 因為FTP連線是基於Windows套接字程式設計的 所以FTP的連線過程和Socket連線一樣 也就是客戶端建立連線套接字以後 呼叫函式Connect()向伺服器連線請求 使用者需要特別

php 獲取ftp伺服器目錄目錄下的所有檔案

其實這個和迴圈遍歷資料夾下的所有檔案類似 但是一些函式不能在這裡用 只能用ftp的函式 下面是程式碼 這個一個ftp類 裡面已經封住好方法 大家呼叫就好 <?php /** * 仿寫CodeIgniter的FTP類 * FTP基本操作: * 1) 登陸;

FileZilla搭建FTP伺服器連線報錯:425 Rejected data connection

最近專案上在用使用FTP傳輸檔案,先是採用了Windows自帶的IIS來配置FTP伺服器,用FTP客戶端工具連線可以但是使用JAVA的FTPClient連線報錯,一直也下不下來檔案,伺服器上日誌也不好看,後面就採用FileZilla來搭建FTP伺服器,介面簡單,使用者配置,

jmeter學習 十 jmeter ftp伺服器連線

jmeter ftp伺服器連線  下載檔案 建立執行緒組-新增-配置元件-FTP請求預設值 執行緒組-新增-sampler-ftp請求 put上傳檔案和get差不多,選擇方式為get 在local file content 選擇上傳的檔案 新增一個監控器-執行緒組-新增-

FTP伺服器安裝配置檔案設定 (阿里雲ESC )

一、簡介 FTP(檔案傳輸協議)全稱是:Very Secure FTP Server。   Vsftpd是linux類作業系統上執行的ftp伺服器軟體。 vsftp提供三種登陸方式:1.匿名登入  2.本地使用者登入  3.虛擬使用者登入vsftpd的特點:1.較高的安全性需求    2.頻寬的限制    3

centos7安裝SSH遠端連線伺服器FTP伺服器

SSH遠端伺服器 1.關閉firewalld防火牆 執行命令:systemctl stop frewalld.service 2.禁用firewalld防火牆 執行命令:systemctl disa

VB.NET】利用純真IP數據庫查詢IP地址信息

ipv targe expr ext 不支持 分享 回收 sys 部分 幾年前從某個博客抄來的,已經忘記原地址了,如果需要C#版的,可以在博客園搜到吧。我因為自己用,所以轉換為了VBNET代碼,而且也放置了很久,今天無意間翻出來,就分享給大家吧。 首先,先下載 純真數據庫

vb.net 使用ip查詢(Host Name)(WorkGroup Name)(MAC Address)-運用cmdnbtstat命令

cmd命令 nat start line shell 語句 owin app tst Sub nbtstat(ByVal ip As String) Dim strRst, strRst1, strRst2, strRst3 As String

VB.NET 檢查 網路連線

Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" (ByVal&nbs

伺服器連線狀態

1.可以使用zabbix拓撲圖實現 參考官方文件:https://www.zabbix.com/documentation/3.4/zh/manual/config/visualisation/maps/links   2.使用cacti外掛Weathermap實現 參考部落格:http

zookeeper中伺服器的角色狀態

使用zookeeper的專案中,zookeeper都是叢集形式部署的,而zk服務又分為不同角色來執行不同的任務。  在區分zk伺服器角色之前,需要解釋幾個概念:  1.事務請求:  在zk中,那些會改變伺服器狀態的請求稱為事務請求(建立節點、更新資料、刪除節點、建立會話

win7 自帶ftp功能搭建ftp伺服器解決方案

網路上有很多教程,故此,我會把搭建過程中經常遇到的問題放到最後,以便觀摩。 一:.搭建ftp伺服器 二:問題及解決方案   一  1.開啟此處 2.開啟ftp伺服器,勾選Internet服務及ftp伺服器如下圖,確定儲存 3.開啟管理,

FileZilla連線不上ftp伺服器

在伺服器上都已經進行設定過,本地測試也能進行連線。 到FileZilla上 what the fack? 百度各種方法,一個上午過去。。。死活就是連不上。 最後解決方式就是:將超時秒數增加(或者置為0),問題解決。 心頭頓時千萬只草泥馬奔騰而過。

linux下常用FTP命令 1 連線ftp伺服器

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

windows平臺下建立HTTP站點FTP伺服器站點

基於win平臺下搭建一個ftp,或http伺服器站點,可以方便的實現檔案共享。 比如FTP站點: 基於視窗的訪問:ftp://192.168.1.202/   基於web的訪問:   HTTP站點訪問:    

c#如何在FTP伺服器上下載資料夾子資料夾中的檔案

c#從FTP伺服器上下載資料夾及子資料夾中的檔案需要三個步驟。 1.單個檔案的下載 /*adss表示存放到本地的路徑名,ftpadss表示從FTP伺服器下載的路徑名*/ public void downLoad(string adss, string ftpadss)   &n

【計算機通訊】FTP伺服器:主機環境配置+Serv-U安裝與破解+常見問題解決方法

搭建FTP伺服器,這事並不困難,照著下述步驟做,你也可以成為伺服器大神!!! 第一步,瞭解FTP的功能以及工作原理 這位博主寫得很通俗易懂,我就不班門弄斧了 第二步,主機環境配置 1.控制面板>程式>啟用或關閉Windows功能>… 照

C# 無法向會話狀態伺服器發出會話狀態請求。請確保 ASP.NET State Service (ASP.NET 狀態服務)已啟動"問題解決方法

異常詳細資訊: System.Web.HttpException: 無法向會話狀態伺服器發出會話狀態請求。請確保已啟動 ASP.NET State service,並且客戶端和伺服器埠是相同的。如果伺服器位於遠端計算機上,請檢查 HKEY_LOCAL_MACHINE\SYST

遠端連線ftp伺服器問題總結:例如“伺服器發回了不可路由的地址,使用伺服器地址代替。”

阿里新購買的伺服器,需要遠端連線上傳下載檔案,於是使用filezilla客戶端連線,發現連線不上。 分析原因:可能是埠沒有開放。 阿里雲登入,遠端連線伺服器,輸入指令 netstat -nltp|grep 21 查詢埠資訊,出現如下反饋: 原因是伺服器沒有搭建f