Solved

CSocket and CSocketFile

Posted on 2000-03-07
3
640 Views
Last Modified: 2013-11-20
I am trying to make  a simple client server application using CSocket and CSocketFile.
I have coded 2 thread functions, one listens for clients requests, while after moving beyond Accept()... first thread funtion "ServerStarter" is supposed to spin the other thread whoise function is "ClientHandler".
Code is as under
UINT ServerStarter(LPVOID pParam)
{CClientSocket*      clientsocket = new CClientSocket();
CListenSocket*      listensocket = new CListenSocket();
.
.
listensocket->Accept(*clientsocket);
CWinThread *def = AfxBeginThread(ClientHandler,clientsocket,THREAD_PRIORITY_BELOW_NORMAL,CREATE_SUSPENDED);
def->ResumeThread();
}
and "ClientHandler" is as under
UINT ClientHandler(LPVOID pParam)
{
((CClientSocket*)pParam)->init();

CString test = " hello server here";
*(((CClientSocket*)pParam)->in)<<test;
((CClientSocket*)pParam)->in->Flush();      
      return 0;
}

while init() is as under

void CClientSocket::init()
{

pSocketFile = new CSocketFile(this);
in = new CArchive(pSocketFile,CArchive::store);
out= new CArchive(pSocketFile,CArchive::load);

}

now programme give an "Assert_Valid" when it goes inside the init on the line
in = ........
to me, it seems that that socket is appearing an unvalid one to it. But if I dont start the thread "ClientHandler" and try to send to the data to client from first thread "ServerHandler" every things goes ok.
what could be the reason ?
0
Comment
Question by:daknight2000
  • 2
3 Comments
 

Author Comment

by:daknight2000
ID: 2593942
I have also tried making "clientsocket" as a global variable  but it didnt help.
0
 
LVL 9

Accepted Solution

by:
ShaunWilde earned 100 total points
ID: 2594627
You should only use CSockets etc in a CWinThread (UI thread) type thread as the CWinThread contains all the initialization required to manage CSockets.

so in your OnAccept of your listener socket you would (pseudo code)

CListenSocket::OnAccept(...)
{
CSocket tempSocket;

Accept(&tempSocket);

CSocketThread*pThread=(CSocketThread*)AfxBeginThread(RUNTIME_CLASS(CSocketThread),...,CREATE_SUSPENDED);

pThread->tempHandle=tempSocket.Detach();

pThread->ResumeThread();
}

then you would attach your socket to your thread in the initinstance
class CSocketThread:public CWinThread
{
SOCKET tempHandle;
CClientSocket m_socket; // derived from CSocket

}

CSocketThread::InitInstance()
{
m_socket.Attach(tempHandle);
m_socket.Init();
}

0
 

Author Comment

by:daknight2000
ID: 2607522
thanx..
sorry i was busy ...so i got late
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.

920 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

16 Experts available now in Live!

Get 1:1 Help Now