using HighWayIot.Log4net; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TouchSocket.Core; using TouchSocket.Sockets; namespace HighWayIot.TouchSocket { public class TcpClientServer { private static readonly Lazy lazy = new Lazy(() => new TcpClientServer()); public static TcpClientServer Instance => lazy.Value; private static LogHelper logHelper = LogHelper.Instance; TcpClient tcpClient = new TcpClient(); /// /// 客户端连接 /// /// public async Task ClientConnect(string ip, string port) { tcpClient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到服务器,此时已经创建socket,但是还未建立tcp tcpClient.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到服务器 tcpClient.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从服务器断开连接。此处仅主动断开才有效。 tcpClient.Closed = (client, e) => { return EasyTask.CompletedTask; };//从服务器断开连接,当连接不成功时不会触发。 tcpClient.Received = (client, e) => { //从服务器收到信息。但是一般byteBlock和requestInfo会根据适配器呈现不同的值。 var mes = e.ByteBlock.Span.ToString(Encoding.UTF8); tcpClient.Logger.Info($"客户端接收到信息:{mes}"); return EasyTask.CompletedTask; }; //载入配置 await tcpClient.SetupAsync(new TouchSocketConfig() .SetRemoteIPHost($"{ip}:{port}") .ConfigureContainer(a => { a.AddConsoleLogger();//添加一个日志注入 })); await tcpClient.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。 Result result = await tcpClient.TryConnectAsync();//或者可以调用TryConnectAsync if (result.IsSuccess()) { } tcpClient.Logger.Info("客户端成功连接"); return result.IsSuccess(); } } }