一、新建WinForm Socket服务端程序
注:rtbReceviceMsg为RichTextBox控件
服务端程序、界面
服务端代码
csharp
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客户端程序
客户端程序、界面
客户端代码
csharp
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);
}
}