Question

I am new to programming in vb.net. I have come a long ways in my development and understanding of vb, but there is one hurtle I can not seem to fix. I am hosting an ftp server on my pc and I am making an app for it to connect to my server and download files. The problem with all the sample code is that everyone ASSUMES the server WILL be ONLINE. My pc may not be running 24/7 and I also may not have the ftp service running.In the first case it shouldnt even register that it is connected. In the second case, it WILL say that is connected b/c the pc is on, but it will return that the machine ou are trying to connect to is actively refusing the connection. Is there a way to TRULY check if the program is indeed connected to the server WITHOUT generating a bunch of Exceptions in the debugger? All I want is a call like:

Dim ftponline As Boolean = False 'Set default to false
ftponline = checkftp()
If ftponline Then
'continue program
Else
'try a different server
End If   

So it would be a function called checkftp that returns a boolean value of true or false. Here is my info: Using Visual Studio 2010 Pro Using .Net framework 4 Can anyone help? Thanks! I have tried the rebex ftp pack as well as the Ultimate FTP Pack. Here is the updated code:

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

No matter what I do, the second server will not connect. I even put a messagebox to show what items were being returned in the second server, but there are no messageboxes apearing when I run the program with my server offline. Is there anyone who can help?

Was it helpful?

Solution

If your code is designed with proper exception catching, it shouldn't be generating a "bunch" of exceptions. The first exception you catch should be your indication that the connection failed and your code should cease attempting to communicate at that point. If for some reason you really need to check the connectivity before attempting the FTP connection, you should be able to simply attempt to synchronously open a TCP socket to the FTP server's port. If that works, it's up and running.

OTHER TIPS

You could simply open a socket to the server's IP address on Port 21 (assuming default FTP port).

I'm not much of a VB.Net programmer, but here's a link to sample code:

http://vb.net-informations.com/communications/vb.net_Client_Socket.htm

If you can establish the socket connection, you know that something is listening on that port (though you have not yet proven it's an FTP server, or that it will accept your login credentials...).

If you wish to simply avoid exceptions in the debugger, you could place the connection code in a method and apply the DebuggerHidden attribute to that method.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top