From: TomChapman on
I am using Visual C++ version 6.

My next project is to write an application that receives data from three
UDP data streams. Each data stream will originate from a different
computer. Each of the three computers will be in its own closed network.

In addition, my program also needs to act as a TCP server on the regular
(open) network at the customer site. (I will also write a small TCP
client application that will connect to my TCP server program.)

I have worked with TCP many times, but never UDP. I have never worked
with closed networks. I have questions. Please help me.


I assume the computer for my application will need 4 network
connections (4 network cards). One to each closed network and one to the
regular network.
Question: Is this correct? If my 4 network card plan is not correct.
Please tell me how to implement this situation.


Several years ago I wrote my networking classes which are based on MFC
CAsyncSocket. When I open a socket to receive one UDP socket stream do I
somehow have to stipulate which network to use? Or does this magically work?

When I open my TCP server socket, how do I stipulate which network is to
be used?

I have looked at CAsyncSocket and I see nothing about network connection
selection. How will this work?
From: Joseph M. Newcomer on
On Thu, 22 Oct 2009 09:41:37 -0500, TomChapman <TomChapman12(a)gmail.com> wrote:

>I am using Visual C++ version 6.
>
>My next project is to write an application that receives data from three
> UDP data streams. Each data stream will originate from a different
>computer. Each of the three computers will be in its own closed network.
****
What is a "closed network"?
****
>
>In addition, my program also needs to act as a TCP server on the regular
>(open) network at the customer site. (I will also write a small TCP
>client application that will connect to my TCP server program.)
>
>I have worked with TCP many times, but never UDP. I have never worked
>with closed networks. I have questions. Please help me.
****
UDP is generally considered a Really Bad Idea Most Of The Time. It has severe
limitations, including the fact that messages may be dropped arbitrarily, truncated
silently, you can receive two copies of the same message, and messages can be received in
a different order than the order in which they were sent.

I fail to see why "open" or "closed" (whatever they might mean!) have any relevance.
Either you get the message or you don't, and how it gets there is not your problem.
****
>
>
>I assume the computer for my application will need 4 network
>connections. One to each closed network and one to the regular network.
>Question: Is this correct? If my 4 network card plan is not correct.
>Please tell me how to implement this situation.
****
If a "closed" network means that it has to have a separate path to your computer, then
yes, you need a connection. This is part of the network topology problem, not one of
programming. All networks need a path to your computer; how they get it is not a
programming issue.
****
>
>
>Several years ago I wrote my networking classes which are based on MFC
>CAsyncSocket. When I open a socket to receive one UDP socket stream do I
>somehow have to stipulate which network to use? Or does this magically work?
****
Try it. Note that UDP is *not* a "stream" protocol, but a *message* protocol, and the
concept of streams does not exist. A message is sent. I might get there, it might not,
you will never know. You will not know if someone has sent you a message if it does not
arrive. The message may be truncated to a maximum of 536 bytes (including headers).
****
>
>When I open my TCP server socket, how do I stipulate which network is to
>be used?
****
As far as I know, this is all magic handled in the network stacks. Note that if the
"closed" networks have disjoint IP address ranges, you might be able to specify a
restricted range of IP addresses to use.
****
>
>I have looked at CAsyncSocket and I see nothing about network connection
>selection. How will this work?
****
The network stacks are supposed to sort this mess out. WinSock does not support any
concept of knowing what "adapter" is being used.
joe
****
Joseph M. Newcomer [MVP]
email: newcomer(a)flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
From: TomChapman on
By a closed network I mean: The customer has several computers that talk
to each other through a single router. There are no router connections
except for this small cluster of computers. It is closed to the outside
world. There is no connection, for instance, to the companies normal
office network. This is done for security reasons. And also for control.
The company that developed this system is in total control of what is
being sent on the interconnecting network. There is no outside influence.

My client has three of these clusters.

To gain access to the data I will plug into each router. You may say I
am breaking their "closed network security", but that is what they want
me to do.

I have ZERO control over the fact that the data is being provided using
UDP. That has already been determined. One of the servers in each of the
networks sends out these UDP packets that several of the other computers
in the cluster utilize. My program will simply be a new receiver of the
same data that is already being sent. What is also different is that my
computer will connect to all three clusters and receive data from all three.


The customer tells me... When UDP is used in a small closed network
where there is only one router and only one route between computers and
when all of the computers are within a few feet of each other using
reliable cabling, that UDP serves their purpose perfectly.

They assure me that I will receive every message. They will be in proper
order. And nothing will be duplicated.



Joseph M. Newcomer wrote:
> On Thu, 22 Oct 2009 09:41:37 -0500, TomChapman <TomChapman12(a)gmail.com> wrote:
>
>> I am using Visual C++ version 6.
>>
>> My next project is to write an application that receives data from three
>> UDP data streams. Each data stream will originate from a different
>> computer. Each of the three computers will be in its own closed network.
> ****
> What is a "closed network"?
> ****
>> In addition, my program also needs to act as a TCP server on the regular
>> (open) network at the customer site. (I will also write a small TCP
>> client application that will connect to my TCP server program.)
>>
>> I have worked with TCP many times, but never UDP. I have never worked
>> with closed networks. I have questions. Please help me.
> ****
> UDP is generally considered a Really Bad Idea Most Of The Time. It has severe
> limitations, including the fact that messages may be dropped arbitrarily, truncated
> silently, you can receive two copies of the same message, and messages can be received in
> a different order than the order in which they were sent.
>
> I fail to see why "open" or "closed" (whatever they might mean!) have any relevance.
> Either you get the message or you don't, and how it gets there is not your problem.
> ****
>>
>> I assume the computer for my application will need 4 network
>> connections. One to each closed network and one to the regular network.
>> Question: Is this correct? If my 4 network card plan is not correct.
>> Please tell me how to implement this situation.
> ****
> If a "closed" network means that it has to have a separate path to your computer, then
> yes, you need a connection. This is part of the network topology problem, not one of
> programming. All networks need a path to your computer; how they get it is not a
> programming issue.
> ****
>>
>> Several years ago I wrote my networking classes which are based on MFC
>> CAsyncSocket. When I open a socket to receive one UDP socket stream do I
>> somehow have to stipulate which network to use? Or does this magically work?
> ****
> Try it. Note that UDP is *not* a "stream" protocol, but a *message* protocol, and the
> concept of streams does not exist. A message is sent. I might get there, it might not,
> you will never know. You will not know if someone has sent you a message if it does not
> arrive. The message may be truncated to a maximum of 536 bytes (including headers).
> ****
>> When I open my TCP server socket, how do I stipulate which network is to
>> be used?
> ****
> As far as I know, this is all magic handled in the network stacks. Note that if the
> "closed" networks have disjoint IP address ranges, you might be able to specify a
> restricted range of IP addresses to use.
> ****
>> I have looked at CAsyncSocket and I see nothing about network connection
>> selection. How will this work?
> ****
> The network stacks are supposed to sort this mess out. WinSock does not support any
> concept of knowing what "adapter" is being used.
> joe
> ****
> Joseph M. Newcomer [MVP]
> email: newcomer(a)flounder.com
> Web: http://www.flounder.com
> MVP Tips: http://www.flounder.com/mvp_tips.htm
From: Stephen Myers on
TomChapman wrote:
> By a closed network I mean: The customer has several computers that talk
> to each other through a single router. There are no router connections
> except for this small cluster of computers. It is closed to the outside
> world. There is no connection, for instance, to the companies normal
> office network. This is done for security reasons. And also for control.
> The company that developed this system is in total control of what is
> being sent on the interconnecting network. There is no outside influence.
>
> My client has three of these clusters.
>
> To gain access to the data I will plug into each router. You may say I
> am breaking their "closed network security", but that is what they want
> me to do.
>
> I have ZERO control over the fact that the data is being provided using
> UDP. That has already been determined. One of the servers in each of the
> networks sends out these UDP packets that several of the other computers
> in the cluster utilize. My program will simply be a new receiver of the
> same data that is already being sent. What is also different is that my
> computer will connect to all three clusters and receive data from all
> three.
>
>
> The customer tells me... When UDP is used in a small closed network
> where there is only one router and only one route between computers and
> when all of the computers are within a few feet of each other using
> reliable cabling, that UDP serves their purpose perfectly.
>
> They assure me that I will receive every message. They will be in proper
> order. And nothing will be duplicated.
>
>
>
> Joseph M. Newcomer wrote:
>> On Thu, 22 Oct 2009 09:41:37 -0500, TomChapman
>> <TomChapman12(a)gmail.com> wrote:
>>
>>> I am using Visual C++ version 6.
>>>
>>> My next project is to write an application that receives data from
>>> three UDP data streams. Each data stream will originate from a
>>> different computer. Each of the three computers will be in its own
>>> closed network.
>> ****
>> What is a "closed network"? ****
>>> In addition, my program also needs to act as a TCP server on the
>>> regular (open) network at the customer site. (I will also write a
>>> small TCP client application that will connect to my TCP server
>>> program.)
>>>
>>> I have worked with TCP many times, but never UDP. I have never worked
>>> with closed networks. I have questions. Please help me.
>> ****
>> UDP is generally considered a Really Bad Idea Most Of The Time. It
>> has severe
>> limitations, including the fact that messages may be dropped
>> arbitrarily, truncated
>> silently, you can receive two copies of the same message, and messages
>> can be received in
>> a different order than the order in which they were sent.
>>
>> I fail to see why "open" or "closed" (whatever they might mean!) have
>> any relevance.
>> Either you get the message or you don't, and how it gets there is not
>> your problem.
>> ****
>>>
>>> I assume the computer for my application will need 4 network
>>> connections. One to each closed network and one to the regular network.
>>> Question: Is this correct? If my 4 network card plan is not correct.
>>> Please tell me how to implement this situation.
>> ****
>> If a "closed" network means that it has to have a separate path to
>> your computer, then
>> yes, you need a connection. This is part of the network topology
>> problem, not one of
>> programming. All networks need a path to your computer; how they get
>> it is not a
>> programming issue.
>> ****
>>>
>>> Several years ago I wrote my networking classes which are based on
>>> MFC CAsyncSocket. When I open a socket to receive one UDP socket
>>> stream do I somehow have to stipulate which network to use? Or does
>>> this magically work?
>> ****
>> Try it. Note that UDP is *not* a "stream" protocol, but a *message*
>> protocol, and the
>> concept of streams does not exist. A message is sent. I might get
>> there, it might not,
>> you will never know. You will not know if someone has sent you a
>> message if it does not
>> arrive. The message may be truncated to a maximum of 536 bytes
>> (including headers). ****
>>> When I open my TCP server socket, how do I stipulate which network is
>>> to be used?
>> ****
>> As far as I know, this is all magic handled in the network stacks.
>> Note that if the
>> "closed" networks have disjoint IP address ranges, you might be able
>> to specify a
>> restricted range of IP addresses to use. ****
>>> I have looked at CAsyncSocket and I see nothing about network
>>> connection selection. How will this work?
>> ****
>> The network stacks are supposed to sort this mess out. WinSock does
>> not support any
>> concept of knowing what "adapter" is being used.
>> joe
>> ****
>> Joseph M. Newcomer [MVP]
>> email: newcomer(a)flounder.com
>> Web: http://www.flounder.com
>> MVP Tips: http://www.flounder.com/mvp_tips.htm

I'd be worried that the routers are not configured to be on separate
subnets. If that's the case you've got major headaches trying to talk
to the networks from a single machine. The TCP/IP stack won't have
anyway of determining the NIC to use for a particular message or connection.

Steve
From: TomChapman on
Stephen Myers > wrote:
> TomChapman wrote:
>> By a closed network I mean: The customer has several computers that
>> talk to each other through a single router. There are no router
>> connections except for this small cluster of computers. It is closed
>> to the outside world. There is no connection, for instance, to the
>> companies normal office network. This is done for security reasons.
>> And also for control. The company that developed this system is in
>> total control of what is being sent on the interconnecting network.
>> There is no outside influence.
>>
>> My client has three of these clusters.
>>
>> To gain access to the data I will plug into each router. You may say I
>> am breaking their "closed network security", but that is what they
>> want me to do.
>>
>> I have ZERO control over the fact that the data is being provided
>> using UDP. That has already been determined. One of the servers in
>> each of the networks sends out these UDP packets that several of the
>> other computers in the cluster utilize. My program will simply be a
>> new receiver of the same data that is already being sent. What is also
>> different is that my computer will connect to all three clusters and
>> receive data from all three.
>>
>>
>> The customer tells me... When UDP is used in a small closed network
>> where there is only one router and only one route between computers
>> and when all of the computers are within a few feet of each other
>> using reliable cabling, that UDP serves their purpose perfectly.
>>
>> They assure me that I will receive every message. They will be in
>> proper order. And nothing will be duplicated.
>>
>>
>>
>> Joseph M. Newcomer wrote:
>>> On Thu, 22 Oct 2009 09:41:37 -0500, TomChapman
>>> <TomChapman12(a)gmail.com> wrote:
>>>
>>>> I am using Visual C++ version 6.
>>>>
>>>> My next project is to write an application that receives data from
>>>> three UDP data streams. Each data stream will originate from a
>>>> different computer. Each of the three computers will be in its own
>>>> closed network.
>>> ****
>>> What is a "closed network"? ****
>>>> In addition, my program also needs to act as a TCP server on the
>>>> regular (open) network at the customer site. (I will also write a
>>>> small TCP client application that will connect to my TCP server
>>>> program.)
>>>>
>>>> I have worked with TCP many times, but never UDP. I have never
>>>> worked with closed networks. I have questions. Please help me.
>>> ****
>>> UDP is generally considered a Really Bad Idea Most Of The Time. It
>>> has severe
>>> limitations, including the fact that messages may be dropped
>>> arbitrarily, truncated
>>> silently, you can receive two copies of the same message, and
>>> messages can be received in
>>> a different order than the order in which they were sent.
>>>
>>> I fail to see why "open" or "closed" (whatever they might mean!) have
>>> any relevance.
>>> Either you get the message or you don't, and how it gets there is not
>>> your problem.
>>> ****
>>>>
>>>> I assume the computer for my application will need 4 network
>>>> connections. One to each closed network and one to the regular network.
>>>> Question: Is this correct? If my 4 network card plan is not correct.
>>>> Please tell me how to implement this situation.
>>> ****
>>> If a "closed" network means that it has to have a separate path to
>>> your computer, then
>>> yes, you need a connection. This is part of the network topology
>>> problem, not one of
>>> programming. All networks need a path to your computer; how they get
>>> it is not a
>>> programming issue.
>>> ****
>>>>
>>>> Several years ago I wrote my networking classes which are based on
>>>> MFC CAsyncSocket. When I open a socket to receive one UDP socket
>>>> stream do I somehow have to stipulate which network to use? Or does
>>>> this magically work?
>>> ****
>>> Try it. Note that UDP is *not* a "stream" protocol, but a *message*
>>> protocol, and the
>>> concept of streams does not exist. A message is sent. I might get
>>> there, it might not,
>>> you will never know. You will not know if someone has sent you a
>>> message if it does not
>>> arrive. The message may be truncated to a maximum of 536 bytes
>>> (including headers). ****
>>>> When I open my TCP server socket, how do I stipulate which network
>>>> is to be used?
>>> ****
>>> As far as I know, this is all magic handled in the network stacks.
>>> Note that if the
>>> "closed" networks have disjoint IP address ranges, you might be able
>>> to specify a
>>> restricted range of IP addresses to use. ****
>>>> I have looked at CAsyncSocket and I see nothing about network
>>>> connection selection. How will this work?
>>> ****
>>> The network stacks are supposed to sort this mess out. WinSock does
>>> not support any
>>> concept of knowing what "adapter" is being used.
>>> joe
>>> ****
>>> Joseph M. Newcomer [MVP]
>>> email: newcomer(a)flounder.com
>>> Web: http://www.flounder.com
>>> MVP Tips: http://www.flounder.com/mvp_tips.htm
>
> I'd be worried that the routers are not configured to be on separate
> subnets. If that's the case you've got major headaches trying to talk
> to the networks from a single machine. The TCP/IP stack won't have
> anyway of determining the NIC to use for a particular message or
> connection.
>
> Steve

Steve,
I also thought about this issue. I will find the answer out from my
customer. I hope that each cluster is not using some standard IP scheme
where each cluster's IPs are identical.

Thank you,