您的位置:首页 > 其它

怎么利用完成端口监听多个不同端口的socket

2016-03-29 17:10 253 查看
你可以试一试 创建两个监听线程,用事件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(...);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: