写一个C# 带样式Socket点对点通信,要求界面上有连接按钮,断开按钮,发送按钮,两个RichTextBox控件,客户端既是服务端又是服务端
时间: 2023-06-14 21:08:31 浏览: 114
以下是一个简单的C#代码示例,用于实现带样式的Socket点对点通信,并包含连接按钮、断开按钮和发送按钮,两个RichTextBox控件,客户端既是服务端又是服务端的功能:
```
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace SocketChat
{
public partial class Form1 : Form
{
private TcpListener listener;
private TcpClient client;
private NetworkStream stream;
private Thread receiveThread;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 初始化
listener = new TcpListener(IPAddress.Any, 8888);
listener.Start();
// 启动接收线程
receiveThread = new Thread(ReceiveMessages);
receiveThread.Start();
}
private void btnConnect_Click(object sender, EventArgs e)
{
// 连接到指定的主机和端口
client = new TcpClient();
client.Connect(txtIP.Text, int.Parse(txtPort.Text));
stream = client.GetStream();
// 启动接收线程
receiveThread = new Thread(ReceiveMessages);
receiveThread.Start();
}
private void btnDisconnect_Click(object sender, EventArgs e)
{
// 断开连接
if (stream != null)
{
stream.Close();
}
if (client != null)
{
client.Close();
}
if (listener != null)
{
listener.Stop();
}
if (receiveThread != null)
{
receiveThread.Abort();
}
}
private void btnSend_Click(object sender, EventArgs e)
{
// 发送消息
string message = txtMessage.Text;
byte[] buffer = Encoding.UTF8.GetBytes(message);
stream.Write(buffer, 0, buffer.Length);
stream.Flush();
txtMessage.Text = "";
}
private void ReceiveMessages()
{
while (true)
{
// 接收消息
try
{
byte[] buffer = new byte[1024];
int length = stream.Read(buffer, 0, buffer.Length);
string message = Encoding.UTF8.GetString(buffer, 0, length);
// 在RichTextBox中显示消息
AppendText(rtbDisplay, message);
}
catch (Exception ex)
{
// 显示错误信息
MessageBox.Show(ex.Message);
break;
}
}
}
private void AppendText(RichTextBox rtb, string text)
{
// 在RichTextBox中添加带样式的文本
rtb.SelectionStart = rtb.TextLength;
rtb.SelectionLength = 0;
rtb.SelectionFont = new Font("Microsoft Sans Serif", 10, FontStyle.Regular);
rtb.SelectionColor = System.Drawing.Color.Black;
rtb.AppendText(text);
rtb.SelectionColor = rtb.ForeColor;
rtb.ScrollToCaret();
}
}
}
```
在上面的代码中,连接按钮通过创建一个TcpClient对象并调用Connect方法来连接到指定的主机和端口。断开按钮通过关闭流、客户端和监听器来断开连接。发送按钮通过将消息文本转换为字节数组,并将其写入流中来发送消息。
在接收线程中,我们使用一个无限循环来接收消息。当接收到消息时,我们使用AppendText方法将带样式的文本添加到RichTextBox控件中,该方法使用SelectionFont和SelectionColor属性来设置文本的字体和颜色。
注意,在实际应用中,需要考虑到网络异常和错误处理等问题。此处仅提供一个简单的示例。
阅读全文