|
Hello,
I've been working on an application that would allow a program to communicate over lan, using UDP and TCP. Here's a general flow of what I was thinking:
1. Send UDP Broadcast to subnet on a port that all applications will listen on (i.e. all listening on 59200)
2. The application running on other nodes, receive the broadcast and echo a UDP broadcast back.
3. Using the information obtained from the UDP echo, a TCP connection is opened and data is exchanged.
4. Connections remain open until an error occurs (this was a requirement of design.)
Is such a design feasible, and if so how would it best be accomplished? I've been reading up on Winsock and MSDN articles on this, and have created client/server applications but have not found very much that would outline a peer-to-peer application like this. I would appreciate any guidance, or direction a resource that could further my understanding on this topic.
|
|
|
|
|
Well, first of all, what are you trying to accomplish and what are your requirements?
If your application is supposed to work over internet, UDP broadcast is usually not a good option because most routers will not forward broadcasts (can you imagine how much traffic would be on the internet if every broadcast message was forwarded?). With your scenario, I'm not even quite clear on why you have the UDP piece at all? Why not just have a TCP/IP connection on a known port?
Peer-to-peer simply means there isn't a man in the middle (or computer/server to be precise), that's just about every socket protocol unless you're using some sort of service in the middle.
|
|
|
|
|
The goal is peer discovery and exchange of configuration information between the hosts, between systems on a subnet-not over the internet but a LAN.
The issue faced is that a specific address is needed for the TCP/IP connection, that will be the piece exchanged via UDP.
I understand that peer-to-peer concept of not having a server, I guess where I'm kind of stuck is how to manage each application having essentially being a client and server. Would each aspect being handled in a separate thread by the ideal method?
|
|
|
|
|
SD1208 wrote: The goal is peer discovery and exchange of configuration information between the hosts, between systems on a subnet-not over the internet but a LAN.
You mean so that they know about each other without having a set server and client? I still don't follow what you're trying to achieve. Why don't you describe functionally what you're trying to achieve instead.
SD1208 wrote: I understand that peer-to-peer concept of not having a server, I guess where I'm kind of stuck is how to manage each application having essentially being a client and server. Would each aspect being handled in a separate thread by the ideal method?
Multiple threads would probably be ideal if a program is expected to work as both a server and client.
|
|
|
|
|
If you are doing this on a company LAN, you should give your IT department a heads up. It is possible they have alerts set up on their monitoring software to notify them whenever there is UDP Broadcast activity on their network.
Soren Madsen
"When you don't know what you're doing it's best to do it quickly" - Jase #DuckDynasty
|
|
|
|
|
Quote: I understand that peer-to-peer concept of not having a server, I guess where I'm kind of stuck is how to manage each application having essentially being a client and server. Would each aspect being handled in a separate thread by the ideal method?
Maybe I am miss-understanding, but I suspect that SD1208 is not understanding the phrases client and server. Does this help any:
Any application on any computer can take the server role or client role. Server in TCP/IP does not refer to a "SERVER" computer that is running a "SERVER" operating system.
The server application must start first. It opens a port and listens for any client application. The client connects to a port already opened by a server. Then the two applications can chat.
Thanks for your time
If you work with telemetry, please check this bulletin board: http://www.bkelly.ws/irig_106/
|
|
|
|
|
error LNK1104: cannot open file 'uafxcwd.lib'
I have installed vs 2012 express edition.
To use mfc i have installed wdk7.1 and set path for mfc libraries and includes directories.
after that i write a code:
#include<afxwin.h>;
struct CSimpleApp : public CWinApp
{
BOOL InitInstance() { return TRUE; }
};
CSimpleApp theApp;
But the above mentioned 1 link error lnk1104 cannot open file 'uafxcwd.lib' is coming.
I tried static and shared mfc and also trid with different character set.
Anybody can solve pls?
|
|
|
|
|
Express edition products do not include MFC, and as far as I am aware the Windows Driver Kit does not either. A quick search of the various directories will tell whether this lib file exists or not.
Veni, vidi, abiit domum
|
|
|
|
|
Dear Richard,
I want to use express version with wdk for mfc programming. can you suggest me any way?
Regards,
Prasun
|
|
|
|
|
WDK is the Windows Driver Kit, it has nothing to do with MFC.
Veni, vidi, abiit domum
|
|
|
|
|
If you want to use MFC, you usually have to pay for VisualStudio. I usually use the "Professional" version, it should have everything you need. Only thing that's useful that any of the other versions have that would be nice is the remote debugger, you have to get one of the other versions for that (for debugging remotely on embedded systems and/or just remote systems).
It is expensive, but if you're a professional, your company should probably cover the cost. If you're a student, I believe you can get student pricing (may depend on university). If you're neither, you may have to consider using an open source alternative. There's quite a few alternative frameworks out there (wxWidgets, Qt, etc.).
|
|
|
|
|
I have a problem where i have two dlls with same name.
does changing CLSIDs of any one of it is advisable ? or any other alternate??
jigar
|
|
|
|
|
Obviously they would need different CLSIDs as there would be no way of distinguishing between them otherwise. The question remains: why?
Veni, vidi, abiit domum
|
|
|
|
|
I have a situation where there are two applications A & B,using C.dll ,problem is that for A, development is frozen,while for B there is a huge overhaul expected in C.dll which will then break A,So either i need to create a new dll for B and rewrite same code of C.dll and do modification ,or i can just copy C.dll project and change its ProgGUID,CLSIDs and do modifications. indeed not a neat solution
jigar
|
|
|
|
|
The obvious answer is to create a copy of C.DLL source, probably by starting a new branch in your source control system. You can give it a different name and CLSID and use that for the development, while leaving the operational version intact. This is fairly standard procedure for any project.
Veni, vidi, abiit domum
|
|
|
|
|
Having two dlls with the same name is not advisable in Windows.
|
|
|
|
|
[Dynamic-Link Library Redirection]
"To use DLL redirection, create a redirection file for your application. The redirection file must be named as follows: App_name.local. For example, if the application name is Editor.exe, the redirection file should be named Editor.exe.local. You must install the .local file in the application directory. You must also install the DLLs in the application directory."
With best wishes,
Vita
|
|
|
|
|
i am use Visual Studio 2012
when i compile my project i get next error:
C2039: 'AtlGetCommCtrlVersion' : is not a member of 'ATL'
error C3861: 'AtlGetCommCtrlVersion': identifier not found
how to fix this.
thanks.
|
|
|
|
|
|
|
Did you follow the link and read the comments from Microsoft?
Veni, vidi, abiit domum
|
|
|
|
|
Do not know how but I understood
i am commented some code in files: atlapp.h and atlgdi.h
|
|
|
|
|
Hi,
I am using MSXML parser. I need to handle exceptions for load xml file , parse it etc.
Cam anyone plz give me some reference for this?
Thanks
|
|
|
|
|
sma123# wrote: Cam anyone plz give me some reference for this? Reference for what exactly? Exception handling is the same whatever your code is doing.
Veni, vidi, abiit domum
|
|
|
|
|
Windows 7, Visual Studio 2008, C++, not managed code
So far, it seems that the best way to start a thread is with this:
uintptr_t _beginthreadex(
void *security,
unsigned stack_size,
unsigned ( __stdcall *start_address )( void * ),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);
found here: http://msdn.microsoft.com/en-us/library/kdzttdcb(v=vs.90).aspx[^]
I found the article in CodeProject about starting a class as the thread and am using that.
The one argument to the thread is the address of a structure used to pass data between the main app and the thread. Call it common_structure. The method that will be started is Main_TCP_Class( void * common_struct ){...} (This class will handle my TCP/IP work and that thread will run for the duration so it seems Main_TCP_Class() is an aptly descriptive name.)
Question: Does the act of starting the thread with _beginthreadex(...) instantiate the class? If not, there will be some follow up questions on this.
If so, that would mean, I presume, that the constructor runs before method Main_TCP_Class() runs. And that means that none of the data in common_structure is accessible until Main_TCP_Class has started and has captured the pointer in the argument.
Is this correct? Any pitfalls that I should be aware of?
Thanks for your time
If you work with telemetry, please check this bulletin board: http://www.bkelly.ws/irig_106/
|
|
|
|