topbanner_forum
  *

avatar image

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  • Thursday March 28, 2024, 5:41 am
  • Proudly celebrating 15+ years online.
  • Donate now to become a lifetime supporting member of the site and get a non-expiring license key for all of our programs.
  • donate

Author Topic: Kyrathasoft Internet Connection Test Demo  (Read 14577 times)

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Kyrathasoft Internet Connection Test Demo
« on: February 04, 2012, 09:19 AM »
You can download the entire C# project as a 41 Kb zipped archive. The project is quite brief, and demonstrates testing for the presence of an active (i.e., "up") internet connection.

NetConnectStatusDemo.png

Download link
« Last Edit: February 05, 2012, 08:33 AM by kyrathaba »

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,612
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #1 on: February 05, 2012, 09:27 AM »
Hm, looking at that code, I'm not convinced that it would really check if I have a working internet connection.
It just shows if I have a valid network connection, but doesn't reach out to an actual internet site to see if it can read data from there. And that's the only reliable way to check if the i-net is working.
I'm on a local network, and internet is handled by a Proxy server.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #2 on: February 05, 2012, 04:47 PM »
Good point. I suppose what we could say is that if this function fails, you definitely do not have an internet connection. If it passes you might have a connection.  Having experimented with this quite a bit, I'll share the complete method I have that gets invoked when one of my program attempts to discover if an update is available. This works reliably for me:

Code: C# [Select]
  1. if (!kyr.networkIsUp()) {
  2.                 MessageBox.Show("You currently are not connected to the Internet.", "Cannot check for update");
  3.                 return;
  4.             }
  5.  
  6.             string msg = string.Empty;
  7.             string pathLastSuccessfullyCheckedForUpdate = Path.Combine(specFldrAppData, "lastUpdateCheck.txt");          
  8.  
  9.             if (System.IO.File.Exists(Path.Combine(specFldrAppData + "updateURL.txt"))) {
  10.                 try {
  11.                     updateToolStripMenuItem.Enabled = false;
  12.                     Cursor = Cursors.WaitCursor;
  13.                     this.Text = "Checking for update...";
  14.                     string url = string.Empty;
  15.                     using (StreamReader sr = new StreamReader(Path.Combine(specFldrAppData + "updateURL.txt"))) {
  16.                         url = sr.ReadLine();                        
  17.                     }
  18.                    
  19.                     WebClient client = new WebClient();
  20.                     try {
  21.                         client.DownloadFile(url, specFldrAppData + "temp.txt");
  22.                     } catch (Exception exFailedToObtain) {
  23.                         MessageBox.Show("Unable to obtain update info from website at this time. Please try again later." +
  24.                         Environment.NewLine + Environment.NewLine + exFailedToObtain.Message, "Try Again Later");
  25.                         updateToolStripMenuItem.Enabled = true;
  26.                         Cursor = Cursors.Default;
  27.                         this.Text = appTitle;
  28.                         return;
  29.                     }
  30.                     client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
  31.                     string downloadURL = string.Empty;
  32.                     string[] parts;                    
  33.                     using (StreamReader sr = new StreamReader(Path.Combine(specFldrAppData, "temp.txt"))) {
  34.                         parts = sr.ReadLine().Split('|');
  35.                         string newest = parts[1].Trim();                        
  36.                         parts = sr.ReadLine().Split('|');
  37.                         downloadURL = parts[1].Trim();
  38.                         pathToOnlineZippedInstaller = downloadURL;
  39.                         parts = sr.ReadLine().Split('|');
  40.                         expectedDownloadSize = Convert.ToInt32(parts[1]);
  41.                         if (String.Compare(Application.ProductVersion.ToString(), newest) < 0) {
  42.  
  43.                             if (blnLoadedPrayerHasBeenModified) {
  44.                                 msg = "A loaded prayer has been modified. Discard it and download the available installer for an updated version of this application?";
  45.                                 if (DialogResult.No == MessageBox.Show(msg, "Discard modified prayer and download update?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)) {
  46.                                     return;
  47.                                 }
  48.                             } else {
  49.                                 clearMyPrayerFields();
  50.                             }
  51.  
  52.                             if (blnWorkingOnNewPrayer) {
  53.                                 msg = "You're currently working on a new prayer. Discard it and download the available installer for an updated version of this application?";
  54.                                 if (DialogResult.No == MessageBox.Show(msg, "Discard modified prayer and download update?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)) {
  55.                                     return;
  56.                                 }
  57.                             } else {
  58.                                 clearMyPrayerFields();
  59.                             }
  60.  
  61.                             versionDownloading = "v" + newest;
  62.                             this.Text = "Downloading newest version " + versionDownloading;
  63.                             downloadProgress.Value = 0;                                                                                  
  64.  
  65.                             downloadFullpath = Path.Combine(pathToDesktop, Path.GetFileName(downloadURL));
  66.                             tmrDownload.Enabled = true;
  67.                             presentMyPrayersPanel();
  68.                             myPrayersInterfaceToolStripMenuItem.Checked = true;
  69.                             tmrDownload.Start();
  70.                             _downloadUpdateBegins = DateTime.Now;
  71.                             blnDownloadingUpdateInstaller = true;
  72.                             client.DownloadFileAsync(new Uri(downloadURL), downloadFullpath);
  73.                         } else {                            
  74.                             using (StreamWriter sw = new StreamWriter(pathLastSuccessfullyCheckedForUpdate)) {
  75.                                 sw.WriteLine(DateTime.Now.ToString());
  76.                             }
  77.                             this.Text = appTitle;
  78.                             if (myPrayersInterfaceToolStripMenuItem.Checked) {
  79.                                 this.Text += " (\"My Prayers\" interface) ";
  80.                             }
  81.                             MessageBox.Show("You are using the most recent version of the program: " +
  82.                                 Application.ProductVersion.ToString(), "No update is currently available");
  83.                             this.Text = appTitle;
  84.                         }
  85.                     }
  86.                 } catch (Exception exUpdate) {                                        
  87.                     updateToolStripMenuItem.Enabled = true;
  88.                     blnDownloadingUpdateInstaller = false;
  89.                     Cursor = Cursors.Default;
  90.                     string errMsg = exUpdate.Message;
  91.                     if ((exUpdate.Message.Contains("outside the bounds")) || (exUpdate.Message.Contains("remote name could not be resolved"))) {
  92.                         errMsg = "\"Prayer Minder\" was unable to connect to the download server to check for an available update at this time.";
  93.                     }
  94.                     MessageBox.Show(errMsg, "Error while seeking available program update");
  95.                 }
  96.                 finally {
  97.  
  98.                 }
  99.             } else {
  100.                 MessageBox.Show("\"Prayer Minder\" couldn't retrieve the URL to look for updates. Please contact the programmer.", "Failed to obtain update info");                
  101.             }
  102.  
  103.             updateToolStripMenuItem.Enabled = true;
  104.             Cursor = Cursors.Default;
  105.  
  106.         }

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,612
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #3 on: February 06, 2012, 01:32 AM »
Hm, that should work. Just try to read the file, and be prepared to catch any exception you get thrown.

Guess you never actually saw this error?:
Code: C# [Select]
  1. MessageBox.Show("You currently are not connected to the Internet.", "Cannot check for update");

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #4 on: February 07, 2012, 07:11 AM »
Guess you never actually saw this error?:

Formatted for C# with the GeSHI Syntax Highlighter [copy or print]

    MessageBox.Show("You currently are not connected to the Internet.", "Cannot check for update");


So far, I've only seen that when my wireless adapter was unplugged, or I deliberately turned off the router. But it should work if there's ever a temporary ISP service outage, shouldn't it?

Ath

  • Supporting Member
  • Joined in 2006
  • **
  • Posts: 3,612
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #5 on: February 07, 2012, 07:59 AM »
So far, I've only seen that when my wireless adapter was unplugged, or I deliberately turned off the router. But it should work if there's ever a temporary ISP service outage, shouldn't it?
It's in fact only a signal that the (local) network for that computer isn't working, but that's the part that is 'always' working, when behind a proxy. Just a loose cable/adapter would trigger it. :)

app103

  • That scary taskbar girl
  • Global Moderator
  • Joined in 2006
  • *****
  • Posts: 5,884
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #6 on: February 07, 2012, 08:22 AM »
This is what I use Karen's Net Monitor for.

kyrathaba

  • N.A.N.Y. Organizer
  • Moderator
  • Joined in 2006
  • *****
  • Posts: 3,200
    • View Profile
    • Donate to Member
Re: Kyrathasoft Internet Connection Test Demo
« Reply #7 on: February 07, 2012, 12:51 PM »
Good link, app!

Yeah, my own program's try to download a small text file from a particular DC URL. If successful, then obviously both (a) my local network access if functional and (b) DC is up (or at least that particular DM subdomain is available).