精华内容
下载资源
问答
  • C#异步通信概念及应用浅析 2009-08-20 18:47 夜里煞白 百度空间 字号:T | T C#异步通信概念及应用主要向你介绍了C#异步通信的实现方法和操作的具体的实现方法,希望对你理解和学习C#异步通信有所帮助。...

    转自夜里煞白http://developer.51cto.com/art/200908/145381.htm

    C#异步通信概念及应用浅析

    2009-08-20 18:47 夜里煞白 百度空间 字号:T | T
    一键收藏,随时查看,分享好友!

    C#异步通信概念及应用主要向你介绍了C#异步通信的实现方法和操作的具体的实现方法,希望对你理解和学习C#异步通信有所帮助。

    AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验

    C#异步通信概念及应用的认识首先让我们来看看:在网络编程中运用Socket,常常需要长期监听某个端口,以获得Socket连接,进而执行相关操作。

    但此时,主线程就会被阻塞,无法做其他事情。为了解决这类问题,Socket类中提供了一些支持异步操作的方法,如表17-10所示。

    下表为Socket类中支持异步操作的方法

        

        

    BeginAccept()

    开始一个异步请求,以创建一个新的Socket对象来接受传入的连接请求

    EndAccept()

    结束一个异步请求,以创建一个新的Socket对象来接受传入的连接请求

    BeginConnect()

    开始一个对远程主机的异步请求

    EndConnect()

    结束一个对远程主机的异步请求

    BeginDisconnect()

    开始异步请求从远程主机断开连接

    EndDisconnect()

    结束从远程主机断开连接的异步请求

    BeginReceive()

    开始从连接的Socket中异步接收数据

    EndReceive()

    结束从连接的Socket中异步接收数据

    BeginReceiveFrom()

    开始从指定网络设备中异步接收数据

    EndReceiveFrom()

    结束从指定网络设备中异步接收数据

    BeginSend()

    开始将数据异步发送到连接的Socket

    EndSend()

    结束数据的异步发送

    BeginSendFile()

    开始将文件异步发送到连接的Socket

    EndSendFile()

    结束文件的异步发送

    BeginSendTo()

    向特定的远程主机异步发送数据

    EndSendTo()

    结束对远程主机数据的异步发送

    从上表中可以看出,这些方法都是成对出现的。这些方法能避免网络通信中的阻塞现象。这些方法的使用机制是在Begin开头的方法中注册一个回调函数,当对应的事件发生时,调用该回调函数,且在回调函数中调用对应的End开头的方法。

    下面以BeginAccept()和EndAccept()为例,说明异步方法的用法。BeginAccept()的声明如下所示。

    1. public IAsyncResult BeginAccept(AsynCallback callback,  
    2. object state); 

    其中,第一个参数是异步委托AsynCallb了ack,state包含此请求的状态信息的对象。

    EndAccept()方法具有三种重载形式,如下所示。

    1. public Socket EndAccept(IAsyncResult asynresult);  
    2.  
    3. public Socket EndAccept(out byte[] buffer,  
    4. IAsyncResult asynresult);  
    5.  
    6. public Socket EndAccept(out byte[] buffer,  
    7. out int bytesTransferred, IAsyncResult asynresult,);  

    asynresult用于存储此异步操作的状态信息及任何用户定义的数据;buffer表示需要传输的字节数据;

    bytesTransferred表示已经传输的字节数。这里的out参数与ref的用法类似,均表示传递引用。它们的区别是ref是传递参数的地址,out是返回值。

    具体用法如下所示。

    1. private AsyncCallback callbackOnAccpt; //定制回调方法  
    2.  
    3. private Socket s;  
    4.  
    5. ……  //C#异步通信
    6.  
    7. s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);  
    8.  
    9. callbackAccpt = new AsyncCallback(this.OnAccept);//实例化回调方法  
    10.  
    11. s.BeginAccept(callbackOnAccpt, this.s); //开始异步请求  
    12.  
    13. ……  
    14.  
    15. private void OnAccept(IAsyncResult asynresult)  
    16.  
    17. {  
    18.  //C#异步通信
    19. ……  
    20.  
    21. s.EndAccept(asynresult); //结束异步请求  
    22.  
    23. ……  
    24.  
    25. }  

    BeginConnect()和EndConnect()用于对远程主机的异步连接请求。BeginConnect()的声明如下所示。

    1. public IAsyncResult BeginConnect(EndPoint remoteEP,  
    2. AsyncCallback callback, object state);  
    3.  
    4. public IAsyncResult BeginConnect(IPAddress address,  
    5. int port,AsyncCallback requestedcallback,object state);  
    6.  
    7. public IAsyncResult BeginConnect(IPAddress[] address,  
    8. int port,AsyncCallback requestedcallback,object state);  
    9.  //C#异步通信
    10. public IAsyncResult BeginConnect(string host,int port,  
    11. AsyncCallback requestedcallback,object state);  

    它的每个重载形式均含有AsyncCallback参数,这是这类Begin开头的方法的特点;remoteEP表示远程主机的IP和端口。

    EndConnect()的声明如下所示。

    public Socket EndConnect(IAsyncResult asynresult);

    它的参数的意义和EndAccept()完全一致。

    BeginSend()表示开始将数据异步发送到连接的Socket,它最常用的声明如下所示。

    1. public IAsyncResult BeginSend(byte[] buffer,  
    2. int offset,int size,SocketFlags socketFlags,  
    3.  
    4. AsyncCallback callback,object state);  

    Buffer表示要发送的数据,offset表示buffer中发送数据的位置,size为发送字节数的大小,socketFlags指SocketFlags值的按位组合。

    EndSend()的声明如下所示。

    1. public Socket EndSend(IAsyncResult asynresult); 

    BeginReceive()表示开始从连接的Socket中异步接收数据,它的常见声明如下所示。

    1. public IAsyncResult BeginReceive(byte[] buffer,  
    2. int offset,int size,SocketFlags socketFlags,  
    3.  
    4. AsyncCallback callback,object state); 

    它的参数和BeginSend()是完全一致的,这里不再赘述。

    EndReceive()的声明如下所示。

    1. public Socket EndReceive(IAsyncResult asynresult); 

    C#异步通信之Socket中异步通信的实现要远比同步困难,这里不再举例。简单地说,在同步中,主线程如果调用一个方法,那么主线程必须等到方法线程执行完才能继续往下执行。因此,主线程和方法线程的执行是串行的。而在异步中,两者能同时执行,它们的执行是并行的

    展开全文
  • C#异步通信概念及应用浅析 .

    千次阅读 2012-02-09 01:10:50
    C#异步通信概念及应用主要向你介绍了C#异步通信的实现方法和操作的具体的实现方法,希望对你理解和学习C#异步通信有所帮助。   C# Socket异步通讯实现详解 C#异步编程模式IAsyncResult浅析 基于事件的C#...
     
    
    • C#异步通信概念及应用主要向你介绍了C#异步通信的实现方法和操作的具体的实现方法,希望对你理解和学习C#异步通信有所帮助。
    •  
      1. C# Socket异步通讯实现详解
      2. C#异步编程模式IAsyncResult浅析
      3. 基于事件的C#异步编程模式浅析
      4. 对委托在C#异步委托和多线程中的理解
      5. C#异步委托之委托使用的时机浅析

       

      C#异步通信概念及应用的认识首先让我们来看看:在网络编程中运用Socket,常常需要长期监听某个端口,以获得Socket连接,进而执行相关操作。

      但此时,主线程就会被阻塞,无法做其他事情。为了解决这类问题,Socket类中提供了一些支持异步操作的方法,如表17-10所示。

      下表为Socket类中支持异步操作的方法

         

         

      BeginAccept()

      开始一个异步请求,以创建一个新的Socket对象来接受传入的连接请求

      EndAccept()

      结束一个异步请求,以创建一个新的Socket对象来接受传入的连接请求

      BeginConnect()

      开始一个对远程主机的异步请求

      EndConnect()

      结束一个对远程主机的异步请求

      BeginDisconnect()

      开始异步请求从远程主机断开连接

      EndDisconnect()

      结束从远程主机断开连接的异步请求

      BeginReceive()

      开始从连接的Socket中异步接收数据

      EndReceive()

      结束从连接的Socket中异步接收数据

      BeginReceiveFrom()

      开始从指定网络设备中异步接收数据

      EndReceiveFrom()

      结束从指定网络设备中异步接收数据

      BeginSend()

      开始将数据异步发送到连接的Socket

      EndSend()

      结束数据的异步发送

      BeginSendFile()

      开始将文件异步发送到连接的Socket

      EndSendFile()

      结束文件的异步发送

      BeginSendTo()

      向特定的远程主机异步发送数据

      EndSendTo()

      结束对远程主机数据的异步发送

      从上表中可以看出,这些方法都是成对出现的。这些方法能避免网络通信中的阻塞现象。这些方法的使用机制是在Begin开头的方法中注册一个回调函数,当对应的事件发生时,调用该回调函数,且在回调函数中调用对应的End开头的方法。

      下面以BeginAccept()和EndAccept()为例,说明异步方法的用法。BeginAccept()的声明如下所示。

      1. public IAsyncResult BeginAccept(AsynCallback callback,  
      2. object state); 

      其中,第一个参数是异步委托AsynCallb了ack,state包含此请求的状态信息的对象。

      EndAccept()方法具有三种重载形式,如下所示。

      1. public Socket EndAccept(IAsyncResult asynresult);  
      2.  
      3. public Socket EndAccept(out byte[] buffer,  
      4. IAsyncResult asynresult);  
      5.  
      6. public Socket EndAccept(out byte[] buffer,  
      7. out int bytesTransferred, IAsyncResult asynresult,);  

      asynresult用于存储此异步操作的状态信息及任何用户定义的数据;buffer表示需要传输的字节数据;

      bytesTransferred表示已经传输的字节数。这里的out参数与ref的用法类似,均表示传递引用。它们的区别是ref是传递参数的地址,out是返回值。

      具体用法如下所示。

      1. private AsyncCallback callbackOnAccpt; //定制回调方法  
      2.  
      3. private Socket s;  
      4.  
      5. ……  //C#异步通信
      6.  
      7. s=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);  
      8.  
      9. callbackAccpt = new AsyncCallback(this.OnAccept);//实例化回调方法  
      10.  
      11. s.BeginAccept(callbackOnAccpt, this.s); //开始异步请求  
      12.  
      13. ……  
      14.  
      15. private void OnAccept(IAsyncResult asynresult)  
      16.  
      17. {  
      18.  //C#异步通信
      19. ……  
      20.  
      21. s.EndAccept(asynresult); //结束异步请求  
      22.  
      23. ……  
      24.  
      25. }  

      BeginConnect()和EndConnect()用于对远程主机的异步连接请求。BeginConnect()的声明如下所示。

      1. public IAsyncResult BeginConnect(EndPoint remoteEP,  
      2. AsyncCallback callback, object state);  
      3.  
      4. public IAsyncResult BeginConnect(IPAddress address,  
      5. int port,AsyncCallback requestedcallback,object state);  
      6.  
      7. public IAsyncResult BeginConnect(IPAddress[] address,  
      8. int port,AsyncCallback requestedcallback,object state);  
      9.  //C#异步通信
      10. public IAsyncResult BeginConnect(string host,int port,  
      11. AsyncCallback requestedcallback,object state);  

      它的每个重载形式均含有AsyncCallback参数,这是这类Begin开头的方法的特点;remoteEP表示远程主机的IP和端口。

      EndConnect()的声明如下所示。

      public Socket EndConnect(IAsyncResult asynresult);

      它的参数的意义和EndAccept()完全一致。

      BeginSend()表示开始将数据异步发送到连接的Socket,它最常用的声明如下所示。

      1. public IAsyncResult BeginSend(byte[] buffer,  
      2. int offset,int size,SocketFlags socketFlags,  
      3.  
      4. AsyncCallback callback,object state);  

      Buffer表示要发送的数据,offset表示buffer中发送数据的位置,size为发送字节数的大小,socketFlags指SocketFlags值的按位组合。

      EndSend()的声明如下所示。

      1. public Socket EndSend(IAsyncResult asynresult); 

      BeginReceive()表示开始从连接的Socket中异步接收数据,它的常见声明如下所示。

      1. public IAsyncResult BeginReceive(byte[] buffer,  
      2. int offset,int size,SocketFlags socketFlags,  
      3.  
      4. AsyncCallback callback,object state); 

      它的参数和BeginSend()是完全一致的,这里不再赘述。

      EndReceive()的声明如下所示。

      1. public Socket EndReceive(IAsyncResult asynresult); 

      C#异步通信之Socket中异步通信的实现要远比同步困难,这里不再举例。简单地说,在同步中,主线程如果调用一个方法,那么主线程必须等到方法线程执行完才能继续往下执行。因此,主线程和方法线程的执行是串行的。而在异步中,两者能同时执行,它们的执行是并行的。

      C#异步通信的相关内容就向你介绍到这里,希望对你了解和学习C#异步通信有所帮助。

    展开全文
  • 同步通信 异步通信 概念

    千次阅读 2009-07-30 16:29:00
    异步通信”是一种很常用的通信方式(效率较低) 异步通信在发送字符时,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端

    在串行通信中,由于是一位一位地进行数据传送。为了把每个字节区别开来,需要收发双方在传送数据的串行信息流中,加入一些标记信号位。在数据中根据所添加的标记信号位的不同方式,分成同步通信和异步通信两种。

     1.“异步通信”是一种很常用的通信方式(效率较低

     

    异步通信在发送字符时,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。

    所传送的数据以字节为单位。每个字节前加上一位起始位,每个字节的后面加上停止位。

    好处:异步通信的好处是通信设备简单、便宜,但传输效率较低。



    2.“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。

     

    收发双方不停地发送和接收连续的同步比特流。

    一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。

    一种是使用准同步,各结点的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。

     

    同步通信是把所传送的数据以多个字节(100字节以上)为单位,在其前后添加标志。

    展开全文
  • Socket异步通信概念及应用

    千次阅读 2010-06-09 17:02:00
    (异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据 和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发: // 接收缓冲区 int nRecvBuf=32*1024;//...

      原来是缓冲区不够,以下转载的解决方法以供不时之需。


    1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
    BOOL bReuseaddr=TRUE;
    setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));


    2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
    TIME_WAIT的过程:
    BOOL bDontLinger = FALSE;
    setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));


    3.在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
    int nNetTimeout=1000;//1秒
    //发送时限
    setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
    //接收时限
    setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));


    4.在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节
    (异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据
    和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发:
    // 接收缓冲区
    int nRecvBuf=32*1024;//设置为32K
    setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
    //发送缓冲区
    int nSendBuf=32*1024;//设置为32K
    setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));


    5. 如果在发送数据的时,希望不经历由系统缓冲区到socket缓冲区的拷贝而影响
    程序的性能:
    int nZero=0;
    setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero));


    6.同上在recv()完成上述功能(默认情况是将socket缓冲区的内容拷贝到系统缓冲区):
    int nZero=0;
    setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int));


    7.一般在发送UDP数据报的时候,希望该socket发送的数据具有广播特性:
    BOOL bBroadcast=TRUE;
    setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL));


    8.在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可
    以设置connect()延时,直到accpet()被呼叫(本函数设置只有在非阻塞的过程中有显著的
    作用,在阻塞的函数调用中作用不大)
    BOOL bConditionalAccept=TRUE;
    setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL));


    9.如果在发送数据的过程中(send()没有完成,还有数据没发送)而调用了closesocket(),以前我们
    一般采取的措施是"从容关闭"shutdown(s,SD_BOTH),但是数据是肯定丢失了,如何设置让程序满足具体
    应用的要求(即让没发完的数据发送出去后在关闭socket)?
    struct linger {
    u_short l_onoff;
    u_short l_linger;
    };
    linger m_sLinger;
    m_sLinger.l_onoff=1;//(在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
    // 如果m_sLinger.l_onoff=0;则功能和2.)作用相同;
    m_sLinger.l_linger=5;//(容许逗留的时间为5秒)
    setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger));

    /

    设置套接口的选项。

       #include <winsock.h>

       int PASCAL FAR setsockopt( SOCKET s, int level, int optname,
       const char FAR* optval, int optlen);

       s:标识一个套接口的描述字。
       level:选项定义的层次;目前仅支持SOL_SOCKET和IPPROTO_TCP层次。
       optname:需设置的选项。
       optval:指针,指向存放选项值的缓冲区。
       optlen:optval缓冲区的长度。

    注释:
      setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。选项影响套接口的操作,诸如加急数据是否在普通数据流中接收,广播数据是否可以从套接口发送等等。
       有两种套接口的选项:一种是布尔型选项,允许或禁止一种特性;另一种是整形或结构选项。允许一个布尔型选项,则将optval指向非零整形数;禁止一个选项optval指向一个等于零的整形数。对于布尔型选项,optlen应等于sizeof(int);对其他选项,optval指向包含所需选项的整形数或结构,而optlen则为整形数或结构的长度。SO_LINGER选项用于控制下述情况的行动:套接口上有排队的待发送数据,且closesocket()调用已执行。参见closesocket()函数中关于SO_LINGER选项对closesocket()语义的影响。应用程序通过创建一个linger结构来设置相应的操作特性:
       struct linger {
    int l_onoff;
    int l_linger;
       };
       为了允许SO_LINGER,应用程序应将l_onoff设为非零,将l_linger设为零或需要的超时值(以秒为单位),然后调用setsockopt()。为了允许SO_DONTLINGER(亦即禁止SO_LINGER),l_onoff应设为零,然后调用setsockopt()。
       缺省条件下,一个套接口不能与一个已在使用中的本地地址捆绑(参见bind())。但有时会需要“重用”地址。因为每一个连接都由本地地址和远端地址的组合唯一确定,所以只要远端地址不同,两个套接口与一个地址捆绑并无大碍。为了通知WINDOWS套接口实现不要因为一个地址已被一个套接口使用就不让它与另一个套接口捆绑,应用程序可在bind()调用前先设置SO_REUSEADDR选项。请注意仅在bind()调用时该选项才被解释;故此无需(但也无害)将一个不会共用地址的套接口设置该选项,或者在bind()对这个或其他套接口无影响情况下设置或清除这一选项。
       一个应用程序可以通过打开SO_KEEPALIVE选项,使得WINDOWS套接口实现在TCP连接情况下允许使用“保持活动”包。一个WINDOWS套接口实现并不是必需支持“保持活动”,但是如果支持的话,具体的语义将与实现有关,应遵守RFC1122“Internet主机要求-通讯层”中第4.2.3.6节的规范。如果有关连接由于“保持活动”而失效,则进行中的任何对该套接口的调用都将以WSAENETRESET错误返回,后续的任何调用将以WSAENOTCONN错误返回。
       TCP_NODELAY选项禁止Nagle算法。Nagle算法通过将未确认的数据存入缓冲区直到蓄足一个包一起发送的方法,来减少主机发送的零碎小数据包的数目。但对于某些应用来说,这种算法将降低系统性能。所以TCP_NODELAY可用来将此算法关闭。应用程序编写者只有在确切了解它的效果并确实需要的情况下,才设置TCP_NODELAY选项,因为设置后对网络性能有明显的负面影响。TCP_NODELAY是唯一使用IPPROTO_TCP层的选项,其他所有选项都使用SOL_SOCKET层。
       如果设置了SO_DEBUG选项,WINDOWS套接口供应商被鼓励(但不是必需)提供输出相应的调试信息。但产生调试信息的机制以及调试信息的形式已超出本规范的讨论范围。
      setsockopt()支持下列选项。其中“类型”表明optval所指数据的类型。
    选项        类型   意义
    SO_BROADCAST BOOL 允许套接口传送广播信息。
    SO_DEBUG BOOL 记录调试信息。
    SO_DONTLINER BOOL 不要因为数据未发送就阻塞关闭操作。设置本选项相当于将SO_LINGER的l_onoff元素置为零。
    SO_DONTROUTE BOOL 禁止选径;直接传送。
    SO_KEEPALIVE BOOL 发送“保持活动”包。
    SO_LINGER struct linger FAR*   如关闭时有未发送数据,则逗留。
    SO_OOBINLINE BOOL 在常规数据流中接收带外数据。
    SO_RCVBUF int 为接收确定缓冲区大小。
    SO_REUSEADDR BOOL 允许套接口和一个已在使用中的地址捆绑(参见bind())。
    SO_SNDBUF int 指定发送缓冲区大小。
    TCP_NODELAY BOOL 禁止发送合并的Nagle算法。

      setsockopt()不支持的BSD选项有:
    选项名    类型 意义
    SO_ACCEPTCONN BOOL 套接口在监听。
    SO_ERROR int 获取错误状态并清除。
    SO_RCVLOWAT int 接收低级水印。
    SO_RCVTIMEO int 接收超时。
    SO_SNDLOWAT int 发送低级水印。
    SO_SNDTIMEO int 发送超时。
    SO_TYPE     int 套接口类型。
    IP_OPTIONS    在IP头中设置选项。

    返回值:
       若无错误发生,setsockopt()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。

    错误代码:
       WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
       WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
       WSAEFAULT:optval不是进程地址空间中的一个有效部分。
       WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
       WSAEINVAL:level值非法,或optval中的信息非法。
       WSAENETRESET:当SO_KEEPALIVE设置后连接超时。
       WSAENOPROTOOPT:未知或不支持选项。其中,SOCK_STREAM类型的套接口不支持SO_BROADCAST选项,SOCK_DGRAM类型的套接口不支持SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE选项。
       WSAENOTCONN:当设置SO_KEEPALIVE后连接被复位。
       WSAENOTSOCK:描述字不是一个套接口。

    参见:
       bind(), getsockopt(), ioctlsocket(), socket(), WSAAsyncSelect().

    copy from:http://blog.csdn.net/qinmi/archive/2007/03/07/1523081.aspx

    sylar QQ: 67666938 MAIL: cug@live.cn
    展开全文
  • 异步通信异步通信在发送字符时,所发送的字符之间的时隙可以是任意的,当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。...
  • 课程笔记 · 同步通信与异步通信概念定义优缺点 定义 简单理解一下同步传输 和 异步传输的定义 同步传输:以数据块为单位进行发送,每个数据块包含多个字符,每个字符5-8bit。每个数据块前面加上起始标志,后面加上...
  • 异步通信机制

    2018-01-06 12:11:41
    转载博客http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 1异步通信概念高性能的服务器程序使用异步通信机制是必须的。异步通信就是在咱们与外部的I/O设备进行打交道的时候,外部设备的I/O和CPU比...
  • IBinder 通信机制是一个轻量级的远程过程调用机制,用于进程内和进程间的高性能的通信。 Android进程间通信(IPC)机制Binder简要介绍和学习计划 ... Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的...
  • 异步通信(Asynchronous) ,是指在发送端和接收端之间不存在共同的时钟。虽然传输速率远低于同步通信,但在发送端和接收端无需额外的时钟线。UART、单总线接口即为异步通信接口。 单工、半双工和全双工 单工通信...
  • 一、串口通信协议简介 串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了...
  • 同步通信和异步通信

    2018-02-28 22:01:00
    异步通信:时钟无要求;离散发送一串数据;一个数据帧以开始位开始,然后是8位数据,以停止位结束; 二、各自优点 同步通信 传输效率高、速度高(因为一大串数据只需要一个前导码,数据有效率高) 适用于...
  • 通信的基本概念 在计算机的设备与设备之间或集成电路之间常常需要进行数据传输,这里简答介绍这些通信的基本概念。 1.串行与并行通信 2.全双工、半双工和单工 3.同步与异步 在同步通讯中,数据信号所传输的内容绝...
  • 真有同步通信和异步通信之分吗?答曰:文字上有,实质没有,因为它们的通信原理实际是相同的。 问题实质: ①不论同步还是异步通信,它们都是串行...③不论概念上同步还是异步通信,开始都必须有一个同步位或一组同
  • C++串口通信编程(异步通信

    千次阅读 2019-03-29 16:05:24
    串口通信一般分为同步和异步两种方式,本博客主要讲述异步通信程序的编写,其编程步骤主要分为四步骤: 一、打开串口 Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台...
  • 通俗理解同步通信与异步通信 网络上对同步传输与异步传输的文章一大把,各种图示解说也很多,但看完终归有点一头雾水,当然了,要想真正透彻地理解这些专业性的概念,最好的方式还是在实践中找到这些概念的体现。 ...
  • 在我们编程的时候,经常会遇到一个概念——异步,诸如异步通信,异步线程,异步代码,异步调用,异步编程等等,那么什么是异步呢?为什么要异步?异步的典型场景是什么?如何使用异步呢?......异步——通信?老码农...
  • 许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其所以而不知起所以然。   同步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而异步指...
  • 同步与异步概念

    2014-08-14 08:57:18
    我们的PC机提供的标准通信接口都是异步的。 异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,结束时有停止位。 异步的另外一...
  • 什么是异步通信?很简单,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态,就像硬件上常提的“中断的概念”。比较准确的说法其实应该叫做“信号驱动的异步I/O”,信号是在软件层次上对...
  • 在我们编程的时候,经常会遇到一个概念——异步,诸如异步通信,异步线程,异步代码,异步调用,异步编程等等,那么什么是异步呢?为什么要异步?异步的典型场景是什么?如何使用异步呢?......异步——通信?老码农...
  • 一、通信 ≠ 通讯 《现代汉语词典第5版说明》强调:“全面正确地执行国家的语言文字规范和科技术语规范是本书的重要原则。” 新版《现汉》(《现代汉语词典》第 5 版) “通信”“通讯”词条的释义: 【通信...
  • 本文来自作者投稿,详细介绍了Python异步编程概念还配合有大量代码实操,帮助你更好的理解异步、并发、协程、Future等概念。公众号:Python学习开发asyncio模块提供了使用协程构建并发应用的工具。它使用一种单线...
  • 同步和异步概念

    千次阅读 2015-12-20 10:39:29
    虽然以前对同步和异步通信有所了解,但是感觉在不同的应用场景下总是容易混淆,所以今天查了查资料,做个小总结。 1. 困惑? 安卓的标准广播机制是一种完全异步执行的广播,异步的特点在于广播发出之后,所有...
  • 点击上方IT牧场,选择置顶或者星标技术干货每日送达本文来讨论一下到底什么是同步,什么是异步,以及在编程中这两个极为重要的概念到底意味着什么。相信很多同学遇到同步异步这两个词的时候大脑瞬间就像红绿灯失灵的...
  • ARM:UART串口异步通信驱动编程

    千次阅读 2017-02-06 22:50:25
    异步/同步:'异步/同步通信两者之间的区别' (课后补充) '单工/半双工/全双工: 单工:任何时候数据只能朝一个方向传输 半双工:数据可以向两个方向传输,任何同一时刻只能朝同一方向传输 全双工:数据可以同时向两...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,233
精华内容 893
关键字:

异步通信概念