using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace SamplePre.Communication.Communication { public class SocketClient { // 服务端 IP 和端口(和你服务端一致) private const string ServerIp = "127.0.0.1"; private const int ServerPort = 8888; private Socket _clientSocket; public Action ReceiveMsgAction; //static async Task Main(string[] args) //{ // var client = new SocketClient(); // await client.StartClientAsync(); //} /// /// 启动客户端 /// public async Task StartClientAsync() { try { // 创建客户端 Socket _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ReceiveMsgAction?.Invoke("正在连接服务端..."); // 连接服务端 await _clientSocket.ConnectAsync(IPAddress.Parse(ServerIp), ServerPort); ReceiveMsgAction?.Invoke("✅ 连接服务端成功!"); // 启动接收消息任务(后台异步监听) _ = Task.Run(ReceiveMsgAsync); } catch (Exception ex) { ReceiveMsgAction?.Invoke($"连接失败:{ex.Message}"); } } public void CloseConnect() { _clientSocket.Close(); ReceiveMsgAction?.Invoke("客户端已断开"); } /// /// 发送消息 /// public async Task SendMsgAsync(string msg) { if (string.IsNullOrEmpty(msg)) return; byte[] data = Encoding.UTF8.GetBytes(msg); await _clientSocket.SendAsync(data, SocketFlags.None); } /// /// 接收服务端消息 /// private async Task ReceiveMsgAsync() { byte[] buffer = new byte[1024]; while (true) { try { int len = await _clientSocket.ReceiveAsync(buffer, SocketFlags.None); if (len == 0) break; string recMsg = Encoding.UTF8.GetString(buffer, 0, len); //回调函数 ReceiveMsgAction?.Invoke($"\n📩 服务端回复:{recMsg}"); } catch { break; } } } } }