我是vb.net编程新手。我对vb的开发和理解有很长的路要走,但有一个我似乎无法解决的问题。我在我的电脑上托管一个ftp服务器,并且正在为它创建一个应用程序来连接到我的服务器并下载文件。所有示例代码的问题是每个人都假设服务器将处于联机状态。我的电脑可能无法全天候运行,而且我也可能没有运行ftp服务。在第一种情况下,它甚至不应该注册它已连接。在第二种情况下,它会说已连接B/C电脑已打开,但它会返回您试图连接的计算机正在主动拒绝连接。有没有一种方法可以真正检查程序是否确实连接到服务器,而不会在调试器中生成一堆异常?我想要的是像一个电话:如何检查ftp服务器是否联机并获取它未生成的错误?
Dim ftponline As Boolean = False 'Set default to false
ftponline = checkftp()
If ftponline Then
'continue program
Else
'try a different server
End If
因此,这将是一个函数调用checkftp返回真或假的布尔值。 这是我的信息: 使用Visual Studio 2010专业版 使用.Net框架4 任何人都可以帮忙吗? 谢谢! 我已经尝试了rebex ftp包以及Ultimate FTP Pack。 下面是更新后的代码:
Public Function CheckConnection(address As String) As Boolean
Dim logonServer As New System.Net.Sockets.TcpClient()
Try
logonServer.Connect(address, 21)
Catch generatedExceptionName As Exception
MessageBox.Show("Failed to connect to: " & address)
End Try
If logonServer.Connected Then
MessageBox.Show("Connected to: " & address)
Return True
logonServer.Close()
Else
Return False
End If
End Function
Public Sub ConnectFtp()
types.Clear()
models.Clear()
ListBox1.Items.Clear()
ListBox2.Items.Clear()
TextBox2.Clear()
Dim request As New Rebex.Net.Ftp
If CheckConnection(*) Then
Dim tempString As String()
request.Connect(*)
request.Login(*, *)
request.ChangeDirectory("/atc3/HD_Models")
Dim list As Array
list = request.GetNameList()
Dim item As String = ""
For Each item In list
tempString = item.Split(New Char() {" "c})
If types.Contains(tempString(0)) = False Then
types.Add(tempString(0))
End If
If models.Contains(item) = False Then
models.Add(item)
End If
Next
request.Disconnect()
request.Dispose()
ElseIf CheckConnection(*) Then
request.Connect(*)
request.Login(*, *)
request.ChangeDirectory(*)
Dim list2 As Array
list2 = request.GetNameList()
Dim item2 As String = ""
Dim tempString2 As String()
For Each item2 In list2
MessageBox.Show(item2)
tempString2 = item2.Split(New Char() {" "c})
If types.Contains(tempString2(0)) = False Then
types.Add(tempString2(0))
End If
If models.Contains(item2) = False Then
models.Add(item2)
End If
Next
request.Disconnect()
request.Dispose()
End If
End Sub
不管我做什么,第二个服务器将无法连接。我甚至放了一个消息框来显示第二个服务器中正在返回什么项目,但是当我离线运行我的服务器时,没有任何消息框出现。有没有人可以帮忙?