等到事件发生

时间:2009-08-10 14:01:52

标签: c++ sockets mfc asynchronous

我正在进行套接字编程。几乎是新手。

应用程序是Windows服务,在其ServiceMain()函数中调用CAsyncSocket::Listen()方法,以侦听客户端连接。但是在它开始侦听连接之后,它将返回并且ServiceMain()函数将返回并且服务已停止。

我想要做的是,等到特定事件发生时说WM_QUIT,直到听取连接。怎么做?

// static member function (callback)
void CNTService::ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv)
{
    // m_Server containts two sockets
    // one for listening and one for accepting connections

    m_Server.StartListening();  // calls Listen method on the listener socket

    // it will return and service will quit
    // which I don't want
}

我很好混合Win32和MFC,所以如果可以在Win32中完成,请告诉我:)

2 个答案:

答案 0 :(得分:-1)

在服务中,您通常会使用WaitForMultipleObjects并等待您的服务所做的任何事情(当不使用框架时WSAEventSelect用于套接字)+当服务管理器告诉您退出时发出的退出事件

答案 1 :(得分:-1)

处理套接字服务器的正确方法类似于(使用winsock的伪代码):

bind(listenerSocket);

while(!stopped)
{
     listen(listenerSocket);
     clientSocket = accept(listenerSocket);

     process(clientSocket);
}

listen通话正在阻塞,等待连接。这样您就可以处理多个连接。进程方法通常在线程池中生成一个线程。

我不喜欢使用MFC套接字,但是你有更多OO方式的东西。有很多关于这类事情的教程。您还可以使用库处理套接字(您获得可移植性......),如boost

如果您只需要处理连接并执行某些过程,则只需:

bind(listenerSocket);

listen(listenerSocket);
clientSocket = accept(listenerSocket);

process(clientSocket);