zoukankan      html  css  js  c++  java
  • Socket.Available 属性

    获取已经从网络接收且可供读取的数据量。

    命名空间:   System.Net.Sockets
    程序集:  System(System.dll 中)

    从网络接收的、可供读取的数据的字节数。

    异常

     
    ExceptionCondition
    SocketException

    试图访问套接字时发生错误。有关更多信息,请参见备注部分。

    ObjectDisposedException

    Socket 已关闭。

    备注
     

    如果当前使用的是非阻止 Socket,一种较好的做法是在调用 Receive 之前使用 Available 来确定数据是否排队等待读取。可用的数据即网络缓冲区中排队等待读取的全部数据。如果在网络缓冲区中没有排队的数据,则 Available 返回 0。

    如果远程主机处于关机状态或关闭了连接,则 Available 会引发 SocketException如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。

    注意

    当应用程序中启用了网络跟踪时,此成员将输出跟踪信息。有关详细信息,请参阅 .NET Framework 中的网络跟踪

    示例

     

    下面的代码示例比较用 FIONREAD 和 Available 属性调用 IOControl 的结果。

     1 // FIONREAD is also available as the "Available" property.
     2 public const int FIONREAD   = 0x4004667F;
     3 
     4 static void DisplayPendingByteCount(Socket s)
     5  {
     6      byte[] outValue = BitConverter.GetBytes(0);
     7 
     8      // Check how many bytes have been received.
     9      s.IOControl(FIONREAD, null, outValue);
    10 
    11      uint bytesAvailable = BitConverter.ToUInt32(outValue, 0);
    12      Console.WriteLine("server has {0} bytes pending. Available property says {1}.",
    13          bytesAvailable, s.Available);
    14 
    15      return;
    16  }

    Socket.Receive 方法 (Byte[], Int32, SocketFlags)

    使用指定的 SocketFlags,从绑定的 Socket 接收指定字节数的数据,并将数据存入接收缓冲区。

    语法

     

    C# 
    public int Receive(
    	byte[] buffer,
    	int size,
    	SocketFlags socketFlags
    )
    

    参数

    buffer

    Byte 类型的数组,它是存储接收到的数据的位置。

    size

    要接收的字节数。

    socketFlags

    SocketFlags 值的按位组合。

    返回值

    Type: System.Int32

    接收到的字节数。

    异常
     

    ExceptionCondition
    ArgumentNullException

    buffernull

    ArgumentOutOfRangeException

    size 超出了 buffer 的大小。

    SocketException

    试图访问套接字时发生错误。有关更多信息,请参见备注部分。

    ObjectDisposedException

    Socket 已关闭。

    SecurityException

    调用堆栈中的调用方没有所需的权限。

    备注
     

    Receive 方法将数据读入 buffer 参数,并返回成功读取的字节数。从面向连接的套接字和无连接套接字中都可以调用 Receive。

    此重载仅要求提供接收缓冲区、要接收的字节数和必需的 SocketFlags

    如果您使用的是面向连接的协议,则在调用 Receive 之前,必须调用 Connect 以建立一个远程主机连接,或者调用 Accept 以接受传入的连接。 Receive 方法只读取在 ConnectAccept 方法中建立的远程主机发送的数据。如果您使用的是无连接协议,则您也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许您收到从任何主机传入的数据。

    如果没有可读取的数据,则 Receive 方法将一直处于阻止状态,直到数据可用,除非使用 Socket.ReceiveTimeout 设置了超时值。如果超过超时值,Receive 调用将引发 SocketException如果您处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException您可以使用 Available 属性确定是否有数据可以读取。如果 Available 为非零,请重试接收操作。

    如果当前使用的是面向连接的 Socket,则 Receive 方法将读取所有可用的数据,直到达到 size 参数指定的字节数。如果远程主机使用 Shutdown 方法关闭了 Socket 连接,并且所有可用数据均已收到,则 Receive 方法将立即完成并返回零字节。

    如果当前使用的是无连接 Socket,则 Receive 将从您在 Connect 方法中指定的目标地址处读取第一个排队的数据报。如果您接收到的数据报大于 buffer 参数的大小,则 buffer 将用消息的第一部分填充,多余的数据都会丢失,并且会引发 SocketException

    System_CAPS_note注意

    如果收到 SocketException,请使用 SocketException.ErrorCode 属性获取特定的错误代码。获取此代码后,您可以参考 MSDN Library 中的 Windows Sockets 第 2 版 API 错误代码文档,获取有关该错误的详细说明。

    System_CAPS_note注意

    当应用程序中启用了网络跟踪时,此成员将输出跟踪信息。有关详细信息,请参阅 .NET Framework 中的网络跟踪

    示例
     

    下面的示例将已发现的数据接收到 buffer 中,并将 SocketFlags 指定为 None

    C# 
    // Receive the host home page content and loop until all the data is received.
    Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
    strRetPage = "Default HTML page on " + server + ":
    ";
    strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
    
    while (bytes > 0)
    {
      bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
      strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
    }
    
    
    SocketPermission

    用于接受来自网络的连接。关联枚举:Accept

  • 相关阅读:
    fatfs输出目录
    《基于多光程长的高散射物质光学参数的测量及其应用》论文
    《2013李永乐线性代数强化班》视频1,2,3,4
    oled屏幕模块
    python中数据结构
    大数据python词频统计之hdfs分发-cacheFile
    8大排序之Python实现 冒泡排序优化
    大数据python词频统计之本地分发-file
    2019-04-30vmware虚拟机安装macos 10.8格式为iso
    2019-04-24Scurecrt 如何下载文本文件
  • 原文地址:https://www.cnblogs.com/endv/p/6132126.html
Copyright © 2011-2022 走看看