Winsock异步转换域名到IP的一个需要注意的地方
4 Comments 2014-12-06 admin
转换域名到IP是网络编程中使用的很频繁的功能,一般情况下gethostbyname即可,但这个函数是阻塞的,如果你的网络程序框架是基于异步的(例如消息socket、完成端口等),那么可能需要一个异步的函数。微软本身提供了一个异步的函数叫WSAAsyncGetHostByName,调用的时候,需要提供一个窗口的句柄和消息定义,当异步返回的时候,会触发该窗口的消息。问题在于,这个函数是顺序的。举个例子:你按顺序查询www.163.com、www.sina.com……,假如前面的163没有返回,实际上后面的sina也需要等待。也就是说,它其实是按顺序查询的。或许针对每个查询新建一个窗口来接收消息可以避免这个问题,感兴趣的朋友可以尝试一下。另外一个解决方案是自己构造DNS查询包来实现异步查询功能。
分类:网络相关
4 Comments 发表评论
解析域名一般都是需要得到IP因为一般下面代码是用这个IP的吧?比如connect,异步的话你IP可能都没出来如何connect?异步有何作用?所以感觉意义不大
还是有用处的。具体请参考Delphi自带的ScktComp.pas。
另外补充一点,gethostbyname本身就是阻塞的,所以文中“或许针对每个查询新建一个窗口来接收消息可以避免这个问题”是没办法的,目前看来最好的办法还是直接DNS了。实际上,迅雷就是直接自己用UDP进行DNS查询的。
记得很早以前该站应该叫藏鲸阁吧?
懒鬼,快快快更新。
发表评论
XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
TrackBack URL | RSS feed for comments on this post.