一、新建WinForm Socket服务端程序
注:rtbReceviceMsg为RichTextBox控件
服务端程序、界面
服务端代码
public partial class Form1 : Form
{public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequired){this.Invoke(new Action<string>(TriggerOnUpdateUI), message);}else{rtbReceviceMsg.Text += message + "\n";}}private void btnStartServer_Click(object sender, EventArgs e){TcpServer.StartListening(9999, this);btnStartServer.Enabled = false;}private void btnStopServer_Click(object sender, EventArgs e){TcpServer.StopListening();btnStartServer.Enabled = true;}
}public class TcpServer{public static Form1 _mainForm;private static TcpListener _listener;private static bool _isRunning;public static void StartListening(int port, Form1 form){_mainForm = form;_listener = new TcpListener(IPAddress.Loopback, port);_listener.Start();_isRunning=true;Console.WriteLine("Server listening on port " + port);Task.Run(() => ListenForClients());}public static void ListenForClients(){while (_isRunning){try{TcpClient client = _listener.AcceptTcpClient();Console.WriteLine("Client connected");HandleClient(client);}catch (SocketException){if (!_isRunning){break;}}}}private static void HandleClient(TcpClient client){NetworkStream stream = client.GetStream();byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0){string message = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine("received" + message);stream.Write(buffer, 0, bytesRead);_mainForm.BeginInvoke(new Action(() => _mainForm.TriggerOnUpdateUI(message)));}}public static void StopListening(){_isRunning = false;_listener?.Stop();}}
二、新建WinForm Socket客户端程序
客户端程序、界面
客户端代码
public partial class Form1 : Form
{public Form1(){InitializeComponent();}public static void ConnectToServer(string hostname, int port){try{using (TcpClient tcpClient = new TcpClient(hostname, port)){Console.WriteLine("Connected to server");NetworkStream stream = tcpClient.GetStream();byte[] data = Encoding.ASCII.GetBytes($"Hellow,Server!{DateTime.Now.ToString()}");stream.Write(data, 0, data.Length);Console.WriteLine("Sent:Hellow,Server!");byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine($"Response: {response}");}}catch (SocketException ex){MessageBox.Show($"连接异常:{ex.Message}");}}private void btnStartServer_Click(object sender, EventArgs e){ConnectToServer("127.0.0.1", 9999);}
}