|
right now i am in a c++ class and even though the questions don't require validation i still lose points on my work i submit, i need to cover my bases here, can anyone help me find a way to reject alphanumeric values and accept only numeric ones?
thanks to anyone who can help.
|
|
|
|
|
You can check if a character is a digit either using the isdigit[^] function or by checking if its ASCII value is between 48 and 57.
|
|
|
|
|
thank you, this look easy to implement into my programs.
|
|
|
|
|
I am writing a multithreaded TCP server(MFC).
The steps I am following are:-
1.)Create a listen socket.
2.)listen on specific port.
3.)spin individual thread for every client that connects.
My application is a dialog based MFC App.But it crashes when a client connects to it.
While spinning the THREAD what parameter should I pass to the thread's main function(CDialog Object or listening socket).
what type of thread should I Create WORKER or UI.
My code is like this:-
BOOL CsockDlg::OnInitDialog()
{
.
.
.
int m_iPort = 4000;
m_sConnectSocket.SetParent(this);
m_sListenSocket.SetParent(this);
m_sListenSocket.Create(m_iPort);
m_sListenSocket.Listen();
return TRUE;
}
void CsockDlg::OnAccept(void)
{
AfxBeginThread(ThreadServer, this);
}
UINT CsockDlg::ThreadServer(LPVOID pParam)
{
CsockDlg* C = (CsockDlg*)pParam;
CAsyncSocket client;
C->m_sListenSocket.Accept(client);
return 0;
}
I have seen many examples for console servers but how to implement it on a Dialog Based Application?????
Future Lies in Present.
Manmohan Bishnoi
|
|
|
|
|
Manmohan29 wrote: My application is a dialog based MFC App.But it crashes when a client connects to it.Frown
While spinning the THREAD what parameter should I pass to the thread's main function(CDialog Object or listening socket).Confused
Hi again!
1) CAsyncSocket is event based and there is no need to use multithreading. This kind of networking model provides everything in a single thread context.
2) Did you try an example from the links I gave you a day ago? I would be much easier for us to help when you start from a working example.
3) What do you mean with "spinning a thread"?
Happy coding
/M
|
|
|
|
|
Thanks for the advice.
I was becoming a little bit lazy to search the examples(Today is Diwali[Indian Festival]). But now i will look them.
I meant "creating a thread for every client" for "spinning a thread".
Future Lies in Present.
Manmohan Bishnoi
|
|
|
|
|
This is the code for threaded server's accepting function
void AcceptConnections(SOCKET ListeningSocket)
{
sockaddr_in sinRemote;
int nAddrSize = sizeof(sinRemote);
while (1) {
SOCKET sd = accept(ListeningSocket, (sockaddr*)&sinRemote,
&nAddrSize);
if (sd != INVALID_SOCKET) {
cout << "Accepted connection from " <<
inet_ntoa(sinRemote.sin_addr) << ":" <<
ntohs(sinRemote.sin_port) << "." <<
endl;
DWORD nThreadID;
CreateThread(0, 0, EchoHandler, (void*)sd, 0, &nThreadID);
}
else {
cerr << WSAGetLastErrorMessage("accept() failed") <<
endl;
return;
}
}
}
we accepting the connection
SOCKET sd = accept(ListeningSocket, (sockaddr*)&sinRemote,
&nAddrSize);
and, then creating a thread to handle client
CreateThread(0, 0, EchoHandler, (void*)sd, 0, &nThreadID);
Here we are passing the connecting socket to the thread function.
And I am puzzled how to pass the connecting socket to thread's function in my application.
" Future Lies in Present. "
Manmohan Bishnoi
|
|
|
|
|
1. Your first post shows that you're using MFC. You could so use CAsyncSocket like the other poster suggested to you.
2. Creating a thread for each connection is inefficient, and can you imagine what would happen when the number of connections keep raising? If you would like to use threads to serve the client requests, just accept the connections in the UI thread and use a thread pool for the serving purpose.
3. Using CreateThread in an MFC program is an extremely bad idea. If you are using MFC, you *must* use AfxBeginThread to create a worker thread. (Generally there is no reason to call CreateThread at all. If you are not using MFC, you should still be calling _beginthreadex )
4. It looks like you are deriving a dialog class from a socket class? Can't a socket class be contained within your dialog class instead?
“Follow your bliss.” – Joseph Campbell
|
|
|
|
|
Just a comment, Rajesh: The poster showed in his previous post that CsockDlg is a CDialog derived class. He tries to convert a multithreaded-socket-API example into an even-based-CAsyncSocket version, if I am not mistaken. Because those two networking models are very different, it's probably easier to start with a fresh working MFC example.
Cheers
/M
|
|
|
|
|
|
I'm glad you found something that'd be of use to you. Dr. Joseph is a terrific guy and his site is loaded with useful articles. On an additional note, he is supporting my view of using a thread pool: Even if the message that comes in from the socket requires considerable computing, the more effective method is to have all the sockets running in the main GUI thread, and have the extensive computing handled by threads from a thread pool.
Important: Never delete any of your messages that you post to this board. It is a RULE! Read the guidelines. I find a question has been posted to me and come here to reply, but I see that it has been removed.
“Follow your bliss.” – Joseph Campbell
|
|
|
|
|
I didn't deleted my post intentionally. Just hit the Post Message Button in a hurry instead of preview.
Don't misunderstand me.
Future Lies in Present.
Manmohan Bishnoi
|
|
|
|
|
This isn't a simple example and the use of threads together with CAsyncSocket is unjustified and inefficient. Joseph M. Newcomer is a deeply respect member in developer circles, however I would say that the link you found was never intended as a MFC networking tutorial. Mixing asynchronous sockets and threads make little sense, here is an overview of basic server concepts:
a) blocking servers (handling only one request at a time, then wait again blocking)
b) threaded servers (handling simultaneous requests, one thread for every new socket, maybe from a pool).
c) asynchronous server (handling simultaneous requests, one thread context will handle all sockets)
d) variants such as IO completition ports
Instead of trying to convert one example code you had into a different thing, it would be easier if you learn about different networking concepts and start with simple examples. There are so many choices and CAsyncSocket might not be the best alternative in the long term (there are known problems). Perhaps have a look at some of the links I gave you.
/M
|
|
|
|
|
Language ID is a WORD from function GetSystemDefaultLangID().
I think there are existing user/system functions which can convert language ID to String, such as:
0x03 (SUBLANG_ARABIC_EGYPT) to string "Arabic (Egypt)"
so that I can save my time to redo them one by one.
Any hints/links?
Thanks
|
|
|
|
|
The mappings are in "winnt.h". If you want to map IDs to strings like "Arabic (Egypt)" you'll have to do it yourself.
|
|
|
|
|
Hi all,
I'm currently doing my final year dissertation, being on wireless transmission in a client-server model. Can anyone suggest any dense literature about technical detailed c++ programming such as enabling communication between server and additional programs (such as ffmpeg), excessing USB devices (such as webcam, mic, video capture card) and the like..
Thanks in advance, any help will be much appreciated
|
|
|
|
|
typedef struct _ABC
{
//....
}ABC;
how to undef ABC here?
this is for correcting/updating VC lib errors.
|
|
|
|
|
includeh10 wrote: this is for correcting/updating VC lib errors.
Could you elaborate a bit on that ? Because I think you are trying to solve the problem in a wrong way.
|
|
|
|
|
Cedric Moonen wrote: Could you elaborate a bit on that ? Because I think you are trying to solve the problem in a wrong way.
how do you get a feeling of "wrong way"?
for this <winbase.h>
typedef struct _OSVERSIONINFOEXA {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
CHAR szCSDVersion[ 128 ];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wReserved[2];
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
typedef struct _OSVERSIONINFOEXW {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
WCHAR szCSDVersion[ 128 ];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wReserved[2];
} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
|
|
|
|
|
You cannot remove a typedef.
These are 2 versions of the same struct, one for unicode (W) and one for non-unicode(A)
There should be a third typedef that will use one or the other depending of your project settings.
something like
#ifdef unicode
#define OSVERSIONINFOEXW OSVERSIONINFOEX
#else
#define OSVERSIONINFOEXA OSVERSIONINFOEX
#endif
Normally one will use the third typedef so that the code can be easily converted to/from unicode without having to manually change the code.
So, what't the errors/problems you originally had ? compilation errors ? runtime errors?
This signature was proudly tested on animals.
|
|
|
|
|
Maximilien wrote: So, what't the errors/problems you originally had ? compilation errors ? runtime errors?
Do you know how many reserved data have been used today?
|
|
|
|
|
includeh10 wrote: Do you know how many reserved data have been used today?
huh ? talking about the wReserved field of the structure ? so what about it ? it's reserved, you should not really care about that. use GetVersionEx to get the structure and be done with it; me think the usage is simple, unless you want to make it complex for no reason at all.
please refer to this[^] post if you want more help... because now, I'm not certain what question you are asking; we're not mind readers.
This signature was proudly tested on animals.
|
|
|
|
|
Maximilien wrote: you should not really care about that.
You are far away from my post.
If you don't care about this, you just use it, no one blames you.
This struct and many others have been redefined for many times by many programmers, people have their own reasons to redefine them, I suggest you do not tell them what you said as quoted sentence.
|
|
|
|
|
includeh10 wrote: This struct and many others have been redefined for many times by many programmers, people have their own reasons to redefine them, I suggest you do not tell them what you said as quoted sentence.
Once again you seem to be losing the plot here. If you have a problem with your code then show what you have tried, explain the problem, including any error messages, and people will try to help you. But don't start being abusive just because you don't get the answer you think is due to you.
|
|
|
|
|
Richard MacCutchan wrote: Once again you seem to be losing the plot here. If you have a problem with your code then show what you have tried, explain the problem, including any error messages, and people will try to help you. But don't start being abusive just because you don't get the answer you think is due to you.
You lost point for who is first "start ..."
Is my post clear? is any replies of the post clear?
|
|
|
|