我正在进行套接字编程。几乎是新手。
应用程序是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中完成,请告诉我:)
答案 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);