Solved

'URGENT' - Unreachable Host Error -

Posted on 2004-08-17
9
488 Views
Last Modified: 2011-09-20
GURU's,

I have a VB .NET console app (vs 2003), that broadcasts its ID every 5 seconds - and a VB .NET Windows App (vs 2003) that listens for that broadcast.
Now, when I test this via ethernet or D-Link (wi-fi) every thing works fine as long as there is other members on the network.
But when no one else is on the network - I receive the following:
'A Socket Operation Was Attempted To An Unreachable Host.' and the broadcasts stop.
My goal was to have the console app broadcasting its ID whether there was anybody on the network or not - and if no one was there that would be OK - but when someone got into range (wireless) - they would see the console app broadcasting its ID. - Actually I did a range test - and when I moved out of range and then came back into range everything was fine.  Its when I 'shutdown' the Windows App - that the console app generates the error and stops broadcasting. Or if I start the console app - and no one else is on the network.

Could someone please show me the error in my ways - and show me how to achieve my goal.

(Broadcast Code from ConsoleApp)

Private Sub broadCastHTID(ByVal mcastGroup As String, ByVal port As Integer, ByVal message As String)
        Dim ip As IPAddress = IPAddress.Parse(mcastGroup)
        Dim s As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, New MulticastOption(ip))
        s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 255)
        Dim b As Byte()
        b = Encoding.ASCII.GetBytes(message)
        Dim ipep As IPEndPoint = New IPEndPoint(IPAddress.Parse(mcastGroup), port)
        s.Connect(ipep)
        s.Send(b, b.Length, SocketFlags.None)
        s.Close()
    End Sub

Sub htIDBroadCast()
        Dim hostIP As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName)
        Dim hostName As System.Net.IPHostEntry = System.Net.Dns.GetHostByAddress(hostIP.AddressList(0))
        Dim trkId As String = hostName.HostName.ToString
        'Broadcast pcID - which is from the config(row 0) and is set to pc (HT device name)
        Try
            '//07-07 Broadcast ID every 5 seconds on port 5000
            Do
                broadCastHTID("255.255.255.255", 5000, pcId) 'for release use ip 255.255.255.255 to broadcast over network
                Thread.Sleep(5000)
                Console.WriteLine("BroadCast Message sent from " + pcID) 'for debug
            Loop
        Catch socketEx As SocketException
            Call handleExc("htIDBroadCast_SocketException", socketEx)
        Catch ex As Exception
            Call handleExc("htCommunications", ex)
           Finally
        End Try
    End Sub

Thanks in advance

MB
0
Comment
Question by:mebjen
  • 6
  • 3
9 Comments
 
LVL 9

Accepted Solution

by:
jdeclue earned 500 total points
Comment Utility
You are catching the SocketException when it can't open the socket - nothing is there to create the connection with... you just need to handle the exception and return control back to htIDBroadCast() for another try... so when I get the exception I would wait and tehn try again... does that make sense?

J
0
 

Author Comment

by:mebjen
Comment Utility
J,

OK - it makes sense - and it works to a point.  When the console app is first started it's broadcasting its ID (lets say ht3234), and the windows app see's the broadcast.  Then I drop the windows app off the network - and the console app nows this and using a goTo line statement the console app starts displaying on the screen "Trying To Connect" -

OK - so now I bring the windows app back on - and the console app sees that it has something to connect with - it begins broadcasting again -

But now the broadcast is 'localhost' not ht3234.

mb
0
 
LVL 9

Expert Comment

by:jdeclue
Comment Utility
Are you running the Windows application on the same machine as the Console App?

J
0
 
LVL 9

Expert Comment

by:jdeclue
Comment Utility
One other question, I see you calling htIDBroadCast and sending it your pcID, but where are you setting the pcID?

J
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 9

Expert Comment

by:jdeclue
Comment Utility
OK... I think your remark tells me you have a config array, where you are setting static values?

J
0
 

Author Comment

by:mebjen
Comment Utility
J,

>> Are you running the Windows application on the same machine as the Console App?

NO -

>> One other question, I see you calling htIDBroadCast and sending it your pcID, but where are you setting the pcID?

        Dim hostIP As System.Net.IPHostEntry = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName)
        Dim hostName As System.Net.IPHostEntry = System.Net.Dns.GetHostByAddress(hostIP.AddressList(0))
        Dim pcID As String = hostName.HostName.ToString

>> OK... I think your remark tells me you have a config array, where you are setting static values?

In a byte array


MB


0
 
LVL 9

Expert Comment

by:jdeclue
Comment Utility
Ok.. I have to run for a while... if someone else doesn't help with this part I will be back around 2pm Est. time... in the states.

J
0
 

Author Comment

by:mebjen
Comment Utility
J,

I have been able to correct the broadCast problem by doing a thread.sleep(500) in the socketException - somehow this is all thats needed, so that when the windows app joins the network again - the console app broadcasts its ID - not 'localHost'.

Thanks for all your help.

MB
0
 
LVL 9

Expert Comment

by:jdeclue
Comment Utility
That is cool, good catch, by letting the thread sleep until you reconnect you arent closing it which is what was causing your problem. The alternative was to reset everything upon reconnection, just as if the app was started up again.

J
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Entering a date in Microsoft Access can be tricky. A typo can cause month and day to be shuffled, entering the day only causes an error, as does entering, say, day 31 in June. This article shows how an inputmask supported by code can help the user a…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now