关于异步套接字和同步套接字

qq51931375 2009-07-02 05:40:37
大家好~
我想问下:
1.异步套接字和同步套接字分别在什么情况下使用?
2.和select联合使用的是异步套接字,还是同步套接字?
谢谢回复 ~~
...全文
910 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baobaodediaozhui 2012-01-14
  • 打赏
  • 举报
回复
lz可能不知道有结贴这一说。。。。
JamyLou 2011-07-04
  • 打赏
  • 举报
回复
楼上好牛,是党的人来着
Eleven 2010-05-17
  • 打赏
  • 举报
回复
结贴通知:
请lz注意结贴。。。。
tlmiai 2010-03-22
  • 打赏
  • 举报
回复
正在学习这方面的东西,很有帮助
wiresharker 2009-07-03
  • 打赏
  • 举报
回复

select是通过轮询方式检测每个socket是否可读、可写
和socket的阻塞、非阻塞属性没有关系。

阻塞、非阻塞属性是描述socket读写数据的一种方式。

(个人理解)
dong364 2009-07-03
  • 打赏
  • 举报
回复
1. 使用WSASocket时, 经常将dwFlags设置为WSA_FLAG_OVERLAPPED, 这样可形成overlapped socket, 于是可使用WSASend, WSARecv, WSASendTo, WSARecvFrom, WSAIoctl这些函数; 使用socket时, 一般使用accept, send, sendfrom, recv, recvfrom较多, 因为::socket()函数不提供dwFlags, 当然也可使用WSA系列函数(将关于overlapped的参数置NULL). WSA系列函数是非阻塞型的所以立即返回, 一般多在异步IO模型中使用, 像send, sendfrom等这样的阻塞型函数往往多见于单一通信或在client端使用.

2. select模型不太常用, 可使用::socket()创建
Gothic_girl 2009-07-02
  • 打赏
  • 举报
回复
同步所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的 LRESULT值返回给调用者。
  异步异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。
Gothic_girl 2009-07-02
  • 打赏
  • 举报
回复
同步指的是发送方不等接收方响应,便接着发下个数据包的通信方式

异步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。


相关概念:

阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;

非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。



在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。
  • 打赏
  • 举报
回复
http://hi.baidu.com/vc_net/blog/item/eceb4954ee30405c574e0070.html

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧