socket:阻塞,非阻塞,同步,异步,我要胡涂了,谁帮我清理一下思路?

解决方案 »

  1.   

    看<windows网络编程技术> 第8章 I/O模型, 讲的很清楚。
      

  2.   


    我是看了,看来看去,绕到里面出不来了xuying() 能否简单的区分一下?
      

  3.   

    阻塞
    比如  recv(........),这个函数就是阻塞函数,只有读到数据了才会返回
    还有  accept(.......)这个函数也是阻塞函数,只有客户端连接上来了才会返回,不然整个程序都停留在accept出现的地方阻塞着,一直等着有客户端连接上来accept返回后才继续执行下去非阻塞就是和上面相反的意思同步也就是和阻塞差不多的意思,当然还有线程里的同步又是另外一个意思了
    异步和同步相反
      

  4.   

    To: snsins非阻塞既然不必等待客户连接,那不就是异步的处理思想嘛,为什么不叫异步而是“非阻塞”呢?
      

  5.   

    同步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而异步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。
        阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据,此函数调用才返回;而非阻塞套接字是指执行此套接字的网络调用时,不管是否执行成功,都立即返回。比如调用recv()函数读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在实际Windows网络通信软件开发中,异步非阻塞套接字是用的最多的。平常所说的C/S(客户端/服务器)结构的软件就是异步非阻塞模式的。