diff --git a/Apewer/Network/Extension.cs b/Apewer/Network/Extensions.cs similarity index 89% rename from Apewer/Network/Extension.cs rename to Apewer/Network/Extensions.cs index f023ec5..61a3c04 100644 --- a/Apewer/Network/Extension.cs +++ b/Apewer/Network/Extensions.cs @@ -9,7 +9,7 @@ namespace Apewer.Network { /// 扩展方法。 - public static class Extension + public static class Extensions { /// 添加邮件账户。 @@ -155,15 +155,31 @@ namespace Apewer.Network return json; } + /// 检查 Socket 在线状态。 + /// + /// + /// + public static bool Online(this Socket socket) + { + if (socket == null) return false; + + var pending = socket.Poll(1000, System.Net.Sockets.SelectMode.SelectRead); + var available = socket.Available; + var offline = pending && available == 0; + return !offline; + } + /// 从套接字接收数据。 /// /// + /// /// /// /// public static byte[] Receive(this Socket socket, int maxLength = 1024) { if (socket == null) throw new ArgumentNullException(nameof(socket)); + if (maxLength < 0 || maxLength > 65535) throw new ArgumentOutOfRangeException(nameof(maxLength)); var buffer = new byte[maxLength]; var received = socket.Receive(buffer, 0, maxLength, SocketFlags.None); diff --git a/Apewer/Network/TcpClient.cs b/Apewer/Network/TcpClient.cs index 2aaacbe..425f722 100644 --- a/Apewer/Network/TcpClient.cs +++ b/Apewer/Network/TcpClient.cs @@ -14,15 +14,15 @@ namespace Apewer.Network /// 套接字实例。 public Socket Socket { get => _socket; } + /// 在线。 + public bool Online { get => Extensions.Online(_socket); } + /// 本地终结点。 public IPEndPoint LocalEndPoint { get; private set; } /// 远程终结点。 public IPEndPoint RemoteEndPoint { get; private set; } - /// 已连接。 - public bool Connected { get => _socket != null && _socket.Connected; } - /// 启动客户端,并连接到服务端。 public TcpClient(string ip, int port) : this(IPAddress.Parse(ip), port) { } @@ -49,9 +49,6 @@ namespace Apewer.Network #endif } - /// 在线。 - public bool Online { get => Extensions.Online(_socket); } - /// 接收。 /// ///