你可以试一试 创建两个监听线程,用事件event模型让其出发链接事件,然后两个不同的线程去处理send,recv 1.对于每个端口,都单独开一个监听线程 2.在每个线程里,有客户端连接的时候,用CreateIoCompletionPort去关联3.关联之后可以立即投递一个recv去接收数据 4.一旦recv到数据后,就会进入IOCP的工作线程了,按照你的具体需求进行编码了 你可以到http://bbs.csdn.net/topics/320108045这里看看,里面有很多高手 有详细的步骤。
http://bbs.csdn.net/topics/320108045
完成端口的确很有难度,
做一个简单的应用也许没什么问题,
但是如果一旦上大型的复杂应用。
你就会发现有很多问题。
监听多个不同的端口和监听一个端口的基本步骤都一样,无非多一个循环
BOOL ListMultipleSocket(int &SocketPort)
{
// init
WSAStartup(..);
// create port
CreateIoCompletionPort(..);
// create worker threads
for(int i = 0; i < 4; i++)
{
CreateThread(ServerWorkerThread, CompletionPort, 0, NULL);
}
// create socket
SOCKET serverSock = socket(...);
// bind socket
serverSock.sin_port = htons(ServerPort); // set to your port
bind(serverSock,...);
// listen it
listen(serverSock, 5);
// dispatch recv
while(TRUE)
{
...
WSAAccept(...);
...
CreateIoCompletionPort(...);
...
WSARecv(...);
}
}