关于vc下socket编程的listen调用问题
在mfc环境下,listen这个函数是等到有客户端链接才返回,还是设置套接字为监听状态就返回?...
在mfc环境下,listen这个函数是等到有客户端链接才返回,还是设置套接字为监听状态就返回?
展开
展开全部
如果你是同步的,阻塞模式(这种模式常用在控制台程序中)的话你应该设置为等到有客户端连接才返回.
如果你的是窗口程序,那么为了保证你在监听中还能处理用户消息不至于出现不响应用户消息的情况,那么你应该设置为异步,非阻塞模式,这种模式下你应该设置套接字为监听状态就返回,设置一个回调函数,如果有客户端连接就,系统调用这个回调函数,后把客户端连接已消息的方式通知应用程序,这个时候,你在回调函数中设置一段相应客户端连接的代码,你就可以既不影响用户消息的处理,又可以处理客户端连接.
总之,如果你的是控制台程序,你就设置为等到有客户端连接才返回,如果你的是窗口程序,你就设置套接字为监听状态就返回.
如果你的是窗口程序,那么为了保证你在监听中还能处理用户消息不至于出现不响应用户消息的情况,那么你应该设置为异步,非阻塞模式,这种模式下你应该设置套接字为监听状态就返回,设置一个回调函数,如果有客户端连接就,系统调用这个回调函数,后把客户端连接已消息的方式通知应用程序,这个时候,你在回调函数中设置一段相应客户端连接的代码,你就可以既不影响用户消息的处理,又可以处理客户端连接.
总之,如果你的是控制台程序,你就设置为等到有客户端连接才返回,如果你的是窗口程序,你就设置套接字为监听状态就返回.
展开全部
listen 会立刻返回,accept 才会造成阻塞。
如果想用异步 SOCKET,直接建立一个继承自 CSocket 的类,重载 OnAccept 来响应 FD_ACCEPT 事件。(CSocket 继承自 CAsyncSocket)
如果直接调用 Winsock 2 API 即 socket, bind, listen, accept,则默认是同步 SOCKET,调用 accept 会阻塞,等到客户端有连接时才返回。
如果想用异步 SOCKET,直接建立一个继承自 CSocket 的类,重载 OnAccept 来响应 FD_ACCEPT 事件。(CSocket 继承自 CAsyncSocket)
如果直接调用 Winsock 2 API 即 socket, bind, listen, accept,则默认是同步 SOCKET,调用 accept 会阻塞,等到客户端有连接时才返回。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询