Fastest way to test internet connection

前端 未结 6 1688
别那么骄傲
别那么骄傲 2020-11-30 04:03

C# 2008 SP1

I am using this code to connect to our client website. This is for a softphone application. Before the user makes a call, the softphone has to test if th

6条回答
  •  旧时难觅i
    2020-11-30 04:35

    I had a similar situation where we were going to make a WCF call to a client and it would take too long if the client wasn't reachable (for whatever reason). What I did was open a raw TCP socket to the client address... This fails quickly if the client is not listening at the port (in your case port 80) and succeeds quickly if they are there.

    This gave me the fastest and most accurate answer to determine if I would be able to communicate with the endpoint that I was trying to reach. The only down side of this is that you have to manage the timeout yourself on the socket because there are only options for Send and Receive timeouts not connect.

    It goes something like this...

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
        try
        {
             IAsyncResult result = socket.BeginConnect("www.xxxxxxxxx.com", 80, null, null );
             //I set it for 3 sec timeout, but if you are on an internal LAN you can probably 
             //drop that down a little because this should be instant if it is going to work
             bool success = result.AsyncWaitHandle.WaitOne( 3000, true );
    
             if ( !success )
             {
                    throw new ApplicationException("Failed to connect server.");
             }
    
             // Success
             //... 
        }
        finally
        {
             //You should always close the socket!
             socket.Close();
        }
    

    I don't have the actual code that I used in front of me, but this should put you on the general path.

提交回复
热议问题