|
Hello,
I have written a client server application using sockets.
In this application, server will send data to client. I have used CSocket(MFC) for this purpose.
Server side application is working fine but problems start as soon as i had intoduced threading inside it.
Below is my code:
///////////////////////////////////////////////////////////
UINT __cdecl ThreadProc( LPVOID pParam ); // Signature of thread proc
AfxSocketInit(NULL);
CSocket sockSrvr;
sockSrvr.Create(PORT);
BOOL bListen = sockSrvr.Listen();
while (1)
{
CSocket sockRecv;
sockSrvr.Accept(sockRecv);
AfxBeginThread(ThreadProc, &sockRecv);
Sleep(5000);
}
///////////////////////////////////////////////////////////
I pass address of CSocket as parameter of 'ThreadProc' and as soon as control enters 'ThreadProc'
iget a debug assertion faliure from sockcore.cpp at the following line:
ASSERT(pState->m_hSocketWindow != NULL);
Can anybody of you please help me i am not able to understan wats wrong to this code?
Thanks in Advance!!
Regards
Tony
|
|
|
|
|
tony_udz wrote: while (1)
{
CSocket sockRecv;
sockSrvr.Accept(sockRecv);
AfxBeginThread(ThreadProc, &sockRecv);
Sleep(5000);
}
I think problem is you are creating sockRecv on stack.
As soon as you create the thread it will go out of scope and destructor will be called and connection will close. Try this
CSocket *sockRecv = new CSocket();
dont forget to delete the socket in the thread after the operations are complete.
I hope it helps.
I did not know that we can not use the worker thread with the CSocket
See Roger's Reply
Regards,
Sandip.
modified on Thursday, September 4, 2008 4:56 AM
|
|
|
|
|
You cannot use a worker thread for MFC sockets, you have to use a UI-thread with a message pump. Read more here[^].
When it comes to CSocket it's virtually useless when developing anything other than toy applications. Mostly because it is blocking when both reading and writing.
Use CAsyncSocket instead and you probably won't even need a secondary thread.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Roger Stoltz wrote: You cannot use a worker thread for MFC sockets, you have to use a UI-thread with a message pump. Read more here[^].
Thanks for the update about CSocket I was not aware of this.
Regards,
Sandip.
|
|
|
|
|
SandipG wrote: Thanks for the update about CSocket I was not aware of this.
You're welcome Sandip.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Really thankful for your solution
|
|
|
|
|
Dear All,
My project requirement is MFC application need to create setup package and deployment.Im Using Visual Studio 2005.
It will be much helpful to me to give some advice on this..
Thank you very much,
Yours,
Anitha
|
|
|
|
|
|
Hi,
Will it support for Visual Studio 2005?
Thanks & Regards
Anitha
|
|
|
|
|
You did not even click on the link provided, did you? Inno works as a stand alone utility and has nothing to do with VS 2005.
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
Thanks..... now i got it.
|
|
|
|
|
hi i have written the following code to receive data from mobile using bluetooth through serial communication.
but it is not working
<code>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include "stdafx.h"
#include "bluetoothConnection.h"
bool BluetoothConnection::openPort(char *portNum)
{
if (portNum != NULL)
{
hcomm = CreateFile((LPCWSTR)portNum, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, NULL, 0);
if (hcomm == INVALID_HANDLE_VALUE)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
bool BluetoothConnection::initPort()
{
dcb.fOutxCtsFlow = false;
dcb.fOutxDsrFlow = false;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fOutX = false;
dcb.fInX = false;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
//time settings
timeouts.ReadIntervalTimeout = 20;
timeouts.ReadTotalTimeoutMultiplier = 10;
timeouts.ReadTotalTimeoutConstant = 100;
if (!SetCommTimeouts(hcomm, &timeouts))
{
return false;
}
else
{
return true;
}
}
void BluetoothConnection::ReadPort()
{
memset(chRead, '\x91', 250);
Sleep(1000L);
ReadFile(hcomm, chRead, 250, &dwRead, NULL);
}
void BluetoothConnection::display()
{
printf("%s\n", chRead);
}
int main()
{
BluetoothConnection *bth1 = new BluetoothConnection();
if (bth1 != NULL)
{
if (bth1->openPort("COM4"))
{
if (bth1->initPort())
{
bth1->ReadPort();
printf("the data from com4 is ....\n");
bth1->display();
}
else
{
printf("fail in init\n");
}
}
else
{
printf("unable to connect\n");
}
}
else
{
printf("unable to connect failed in initial state\n");
}
Sleep(1000L);
return 0;
}
</code>
its failing in CreateFile function coz its returns 0xffffff..
can this code be used for bluetooth coz i found such code for serial port comm and infrared.
is there any configurations between mobile and pc before running this application if there please provide me the steps..
|
|
|
|
|
First, are you sure the COM4 port exist ? Are you developping for winCE ? If yes, then if I remember well, you have to append a ':' after the port name (thus "COM4:"). Not sure anymore, try it and tell me if it works.
|
|
|
|
|
iam not using for windows CE its PC to mobile VC++ 2005 and appending of : has not solved, plz give me some soln..
|
|
|
|
|
Does this port exist at least ? Did you try to open it with hyperterminal ?
|
|
|
|
|
no i am a begginer and i used AT command to test a while long back but now i dont remember it plz.. which is the command to type in and check for the status... and one thing when i open hyperterminal and select com4 and try to type some thing then my mobile disconnects the bluetooth connection...
|
|
|
|
|
Hello everyone,
In ATL wizard to create a coclass, under COM category there is an item named "Type", for example, if we assign the short name under C++ category to "aaaa", the value of "Type" is "aaaa Class".
My question is, what is the function of the so-called "Type" and how will client or COM server use this value?
thanks in advance,
George
|
|
|
|
|
Hi all,
I m using a static text.
i want it shows like a link and open a dilog box on its click event.
please tell me how can i do this.
thanks in advance.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
See here[^]
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Here hyper link is persen i just want only simple link
where on click on static text the dialog box is open
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
By following any one of the hundreds of examples that exist out there for this problem.
Or you could just sub-class the static and give it new behaviours so that (a) it's underlined, (b) has a different cursor (c) has a different colour (d) changes colour once visited (e) performs the desired action upon WM_LBUTTONUP, so long as it was under the mouse when the WM_LBUTTONDOWN message came in.
Remember, google is your friend. (Also, I believe Chris has written an article & class for this)
Results
|
|
|
|
|
If possible please explain me with example.
thanks in advance.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
buddy dig the code anshuman provided to you!, instead of opening webbrowser you couldn't open dialog box from there
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You/xml>
|
|
|
|
|
I just dont want to use web browser , i want to use link with in my application.
so i want open a dilog box.
is this possible.
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
I haven't gone through the code for the link that I provided you. but the article writer must have used ShellExecute or something like that to help the user navigate to a URL on which he/she clicks. You can replace this code with creation/showing of a dialog
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|