代码记录。
SocketService 服务端 Form界面
public partial class Form1 : Form
{
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public Form1()
{
InitializeComponent();
Init();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//关闭socket
clientSocket.Close();
}
public void Init()
{
Task.Factory.StartNew(async () =>
{
while (true)
{
await Task.Delay(1000);
try
{
if (clientSocket.Connected == false)
{
ShowMessage("正在连接服务端...");
Connected();
}
}
catch (Exception e)
{
richTextBox1.Text += e.Message;
}
}
});
}
private void Connected()
{
try
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 创建一个Socket对象,指定使用TCP协议
// 获取服务端的IP地址
IPAddress ipAdress = IPAddress.Parse("127.0.0.1");
// 获取服务端的端口号
int port = int.Parse("12345");
// 创建一个网络端点
IPEndPoint ipEndPoint = new IPEndPoint(ipAdress, port);
// 调用Connect方法,连接服务端
clientSocket.Connect(ipEndPoint);
if (clientSocket.Connected == true)
{
// 创建一个线程,用于接收数据
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.IsBackground = true;
receiveThread.Start();
// 把消息转换为字节数组
byte[] sendBuffer = Encoding.UTF8.GetBytes("连接服务端成功!");
// 调用Send方法,向服务端发送数据
clientSocket.Send(sendBuffer);
}
}
catch (Exception ex)
{
ShowMessage(ex.Message);
}
}
// 接收数据的方法
private void ReceiveMessage()
{
while (true)
{
try
{
// 定义一个字节数组,用于接收数据
byte[] receiveBuffer = new byte[1024];
// 调用Receive方法,返回接收到的数据长度
int length = clientSocket.Receive(receiveBuffer);
// 如果长度为0,表示服务端断开连接
if (length == 0)
{
clientSocket.Close();
break;
}
// 把字节数组转换为字符串
string receiveMessage = Encoding.UTF8.GetString(receiveBuffer, 0, length);
// 显示接收到的消息
ShowMessage("接收到服务端消息:" + receiveMessage);
}
catch (Exception ex)
{
clientSocket.Close();
break;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
// 把消息转换为字节数组
byte[] sendBuffer = Encoding.UTF8.GetBytes(this.textBox1.Text.Trim());
// 调用Send方法,向服务端发送数据
clientSocket.Send(sendBuffer);
// 显示发送的消息
ShowMessage("向服务端发送消息:" + this.textBox1.Text);
}
catch (Exception ex)
{
// 显示异常消息
ShowMessage(ex.Message);
}
}
private void ShowMessage(string message)
{
// 在消息框中追加一行文本
this.Invoke(new Action(() =>
{
richTextBox1.AppendText(message + "\r\n");
richTextBox1.ScrollToCaret();
}));
}
}
SocketCustom 客户端 Form界面
public partial class Form1 : Form
{
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public Form1()
{
InitializeComponent();
Init();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
//关闭socket
clientSocket.Close();
}
public void Init()
{
Task.Factory.StartNew(async () =>
{
while (true)
{
await Task.Delay(1000);
try
{
if (clientSocket.Connected == false)
{
ShowMessage("正在连接服务端...");
Connected();
}
}
catch (Exception e)
{
richTextBox1.Text += e.Message;
}
}
});
}
private void Connected()
{
try
{
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 创建一个Socket对象,指定使用TCP协议
// 获取服务端的IP地址
IPAddress ipAdress = IPAddress.Parse("127.0.0.1");
// 获取服务端的端口号
int port = int.Parse("12345");
// 创建一个网络端点
IPEndPoint ipEndPoint = new IPEndPoint(ipAdress, port);
// 调用Connect方法,连接服务端
clientSocket.Connect(ipEndPoint);
if (clientSocket.Connected == true)
{
// 创建一个线程,用于接收数据
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.IsBackground = true;
receiveThread.Start();
// 把消息转换为字节数组
byte[] sendBuffer = Encoding.UTF8.GetBytes("连接服务端成功!");
// 调用Send方法,向服务端发送数据
clientSocket.Send(sendBuffer);
}
}
catch (Exception ex)
{
ShowMessage(ex.Message);
}
}
// 接收数据的方法
private void ReceiveMessage()
{
while (true)
{
try
{
// 定义一个字节数组,用于接收数据
byte[] receiveBuffer = new byte[1024];
// 调用Receive方法,返回接收到的数据长度
int length = clientSocket.Receive(receiveBuffer);
// 如果长度为0,表示服务端断开连接
if (length == 0)
{
clientSocket.Close();
break;
}
// 把字节数组转换为字符串
string receiveMessage = Encoding.UTF8.GetString(receiveBuffer, 0, length);
// 显示接收到的消息
ShowMessage("接收到服务端消息:" + receiveMessage);
}
catch (Exception ex)
{
clientSocket.Close();
break;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
// 把消息转换为字节数组
byte[] sendBuffer = Encoding.UTF8.GetBytes(this.textBox1.Text.Trim());
// 调用Send方法,向服务端发送数据
clientSocket.Send(sendBuffer);
// 显示发送的消息
ShowMessage("向服务端发送消息:" + this.textBox1.Text);
}
catch (Exception ex)
{
// 显示异常消息
ShowMessage(ex.Message);
}
}
private void ShowMessage(string message)
{
// 在消息框中追加一行文本
this.Invoke(new Action(() =>
{
richTextBox1.AppendText(message + "\r\n");
richTextBox1.ScrollToCaret();
}));
}
}