Socket.Available
返回可供使用的字节数。

解决方案 »

  1.   

    MSDN上的详细信息,具体也就不用我多说了吧!
    语言
    C#全部显示
    确定一个或多个套接字的状态。
    [C#]
    public static void Select(
       IList checkRead,
       IList checkWrite,
       IList checkError,
       int microSeconds
    );
    参数
    checkRead 
    要检查可读性的 Socket 实例的 IList。 
    checkWrite 
    要检查可写性的 Socket 实例的 IList。 
    checkError 
    要检查错误的 Socket 实例的 IList。 
    microSeconds 
    等待响应的时间(以微秒为单位)。 
    异常
    异常类型 条件 
    ArgumentNullException checkRead 参数为空引用(Visual Basic 中为 Nothing)或空。 
    -并且-checkWrite 参数为空引用 (Nothing) 或空。-并且-checkError 参数为空引用 (Nothing) 或空。
     
    SocketException 试图访问套接字时发生错误。有关更多信息,请参见备注部分。 备注
    Select 是一种静态方法,它可确定一个或多个 Socket 实例的状态。必须先将一个或多个套接字放入 IList 中,然后才能使用 Select 方法。通过调用 Select(将 IList 作为 checkread 参数),可检查是否具有可读性。若要检查套接字是否具有可写性,请使用 checkwrite 参数。若要检测错误条件,请使用 Checkerror。在调用 Select 之后,IList 中将仅填充那些满足条件的套接字。如果当前处于侦听状态,则可读意味着可成功地对 Accept 进行调用而没有阻塞。如果当前已接受连接,则可读意味着有可读取的数据。这些情况下,所有的接收操作均可成功进行而没有阻塞。可读性也可指示远程 Socket 是否已经关闭连接;如果连接已关闭,则对 Receive 的调用将立即返回,并返回零字节。如果对 Connect 进行非阻塞调用,则可写意味着已经成功连接。如果已经建立连接,则可写意味着所有的发送操作均会成功完成而没有阻塞。如果对 Connect 进行非阻塞调用,则错误检查参数将标识尚未成功连接的套接字。注意   如果只想确定单个 Socket 的状态,请使用 Poll 方法。
    注意   如果收到 SocketException,请使用 SocketException.ErrorCode 获取具体的错误代码。获取该代码后,可以参考 MSDN 中的 Windows Socket Version 2 API(Windows 套接字第 2 版 API)错误代码文档以获取有关错误的详细说明。
    示例
    [Visual C#] 下面的示例使用 Select 来确定哪一个侦听套接字有连接请求。[C#] 
    IPHostEntry ipHostEntry = Dns.Resolve(Dns.GetHostName());
    IPAddress ipAddress = ipHostEntry.AddressList[0];Socket socket0 = null;
    Socket socket1 = null; 
    Socket socket2 = null; 
    Socket socket3 = null; 
    Socket socket4 = null; 
    Socket socket5 = null; ArrayList listenList = new ArrayList();
    listenList.Add(socket0);
    listenList.Add(socket1);
    listenList.Add(socket2);ArrayList acceptList = new ArrayList();
    acceptList.Add(socket3);
    acceptList.Add(socket4);
    acceptList.Add(socket5);for( int i = 0; i < 3; i++ )
    {
      listenList[i] = new Socket(AddressFamily.InterNetwork,
                                 SocketType.Stream,
                                 ProtocolType.Tcp);
      ((Socket)listenList[i]).Bind(new IPEndPoint(ipAddress, 11000 + i));
      ((Socket)listenList[i]).Listen(10);
    }// Only the sockets that contain a connection request
    // will remain in listenList after Select returns.Socket.Select(listenList, null, null, 1000);for( int i = 0; i < listenList.Count; i++ )
    {
      acceptList[i] = ((Socket)listenList[i]).Accept();
    }要求
    平台: Windows 98, Windows NT 4.0, Windows ME, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 系列, .NET Framework 精简版 - Windows CE .NET, 公共语言基础结构 (CLI) 标准请参见
    Socket 类 | Socket 成员 | System.Net.Sockets 命名空间 | IList | Accept | Connect | Poll | Socket 成员(Visual J# 语法) | C++ 托管扩展编程 
    --------------------------------------------------------------------------------发送有关此主题的意见 &copy; 2001-2002 Microsoft Corporation。保留所有权利。