请教高手:如何在.net里探测socket是否有数据可读 Socket.Available返回可供使用的字节数。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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++ 托管扩展编程 --------------------------------------------------------------------------------发送有关此主题的意见 © 2001-2002 Microsoft Corporation。保留所有权利。 请教一个linq生成树形类结构的问题 谁有html中文帮助文档 我现在不想让datatable里面第一列显示怎么做? ===求助:Process.Start()之奇怪问题========= 关于GridView和ListView效果的一个问题!! 菜鸟..问一个大家会吐血的问题:.net默认的编码方式是什么? 〓如何把查询结果赋值给变量? windowsform水晶图形报表,使用sql语句进行动态查询,怎么弄 三层结构问题?急啊????? 兄弟们,关于类QQ密码输入框的保护问题,求解决办法,谢谢了! 北京急聘:c#开发工程师 帮帮忙阿
语言
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++ 托管扩展编程
--------------------------------------------------------------------------------发送有关此主题的意见 © 2001-2002 Microsoft Corporation。保留所有权利。