From ba717f4d3d2d80f24ccb09066d2076ac82e2bd3f Mon Sep 17 00:00:00 2001 From: Elivo Date: Thu, 31 Jul 2025 01:18:23 +0800 Subject: [PATCH] =?UTF-8?q?TcpClient=EF=BC=8C=E5=8E=BB=E9=99=A4=20Connecte?= =?UTF-8?q?d=20=E5=B1=9E=E6=80=A7=EF=BC=88=E4=B8=8D=E5=8F=AF=E9=9D=A0?= =?UTF-8?q?=EF=BC=89=EF=BC=8C=E5=A2=9E=E5=8A=A0=20Online=20=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E7=94=A8=E4=BA=8E=E5=88=A4=E6=96=AD=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apewer/Network/{Extension.cs => Extensions.cs} | 18 +++++++++++++++++- Apewer/Network/TcpClient.cs | 9 +++------ 2 files changed, 20 insertions(+), 7 deletions(-) rename Apewer/Network/{Extension.cs => Extensions.cs} (89%) 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); } - /// 接收。 /// ///