C#实现的TCP/UDP网络调试助手
C#实现的TCP/UDP网络调试助手,整合了多线程处理、协议切换和实时日志功能,支持WinForms开发。
一、核心代码实现(完整版)
1. 主窗体设计(Form1.cs)
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace NetworkDebugTool
{
public partial class MainForm : Form
{
private TcpListener tcpListener;
private TcpClient tcpClient;
private UdpClient udpClient;
private bool isServerRunning = false;
private bool isClientConnected = false;
public MainForm()
{
InitializeComponent();
InitializeUI();
}
private void InitializeUI()
{
this.Size = new System.Drawing.Size(500, 400);
this.Text = "TCP/UDP网络调试助手 v1.2";
// 协议选择
cobProtocol.Items.AddRange(new object[] { "TCP", "UDP" });
cobProtocol.SelectedIndex = 0;
// 控件状态初始化
btnStartServer.Enabled = true;
btnConnectClient.Enabled = false;
btnSend.Enabled = false;
}
// 初始化协议配置
private void cobProtocol_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateControlsState();
}
// 启动服务端/连接客户端
private async void btnStartServer_Click(object sender, EventArgs e)
{
try
{
string ip = txtIP.Text;
int port = int.Parse(txtPort.Text);
if (cobProtocol.SelectedItem.ToString() == "TCP")
{
tcpListener = new TcpListener(IPAddress.Parse(ip), port);
tcpListener.Start();
isServerRunning = true;
btnStartServer.Enabled = false;
await HandleTcpServer();
}
else
{
udpClient = new UdpClient(port);
isServerRunning = true;
btnStartServer.Enabled = false;
await ReceiveUdpMessages();
}
}
catch (Exception ex)
{
ShowLog($"错误: {ex.Message}", Color.Red);
}
}
// TCP服务端处理
private async Task HandleTcpServer()
{
try
{
while (isServerRunning)
{
TcpClient client = await tcpListener.AcceptTcpClientAsync();
isClientConnected = true;
btnConnectClient.Enabled = true;
ShowLog("客户端已连接", Color.Green);
await HandleTcpClient(client);
}
}
catch
{
ShowLog("服务器异常断开", Color.Red);
}
}
// TCP客户端处理
private async Task HandleTcpClient(TcpClient client)
{
using (client)
using (NetworkStream stream = client.GetStream())
{
byte[] buffer = new byte[4096];
while (isClientConnected)
{
try
{
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
ShowLog($"接收: {message}", Color.Blue);
}
catch
{
ShowLog("客户端断开连接", Color.Red);
break;
}
}
}
}
// UDP接收
private async Task ReceiveUdpMessages()
{
try
{
while (isServerRunning)
{
UdpReceiveResult result = await udpClient.ReceiveAsync();
string message = Encoding.UTF8.GetString(result.Buffer);
ShowLog($"UDP接收({result.RemoteEndPoint}): {message}", Color.Blue);
}
}
catch
{
ShowLog("UDP接收异常", Color.Red);
}
}
// 发送消息
private async void btnSend_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtSend.Text)) return;
try
{
byte[] buffer = Encoding.UTF8.GetBytes(txtSend.Text);
if (cobProtocol.SelectedItem.ToString() == "TCP" && isClientConnected)
{
await tcpClient.GetStream().WriteAsync(buffer, 0, buffer.Length);
}
else if (cobProtocol.SelectedItem.ToString() == "UDP")
{
udpClient.Send(buffer, buffer.Length, txtIP.Text, int.Parse(txtPort.Text));
}
ShowLog($"发送: {txtSend.Text}", Color.Green);
}
catch (Exception ex)
{
ShowLog($"发送失败: {ex.Message}", Color.Red);
}
}
// 日志显示
private void ShowLog(string message, Color color)
{
if (txtLog.InvokeRequired)
{
txtLog.Invoke(new Action(() => ShowLog(message, color)));
}
else
{
txtLog.AppendText($"[{DateTime.Now:HH:mm:ss}] {message}\r\n");
txtLog.SelectionStart = txtLog.TextLength;
txtLog.SelectionColor = color;
}
}
// 控件状态更新
private void UpdateControlsState()
{
bool isTcp = cobProtocol.SelectedItem.ToString() == "TCP";
btnConnectClient.Visible = isTcp;
btnStartServer.Enabled = !isServerRunning;
}
}
}
二、界面设计(Form1.Designer.cs)
// 关键控件定义
private ComboBox cobProtocol;
private TextBox txtIP;
private TextBox txtPort;
private Button btnStartServer;
private Button btnConnectClient;
private TextBox txtSend;
private Button btnSend;
private TextBox txtLog;
// 初始化代码片段
this.cobProtocol = new System.Windows.Forms.ComboBox();
this.txtIP = new System.Windows.Forms.TextBox();
this.txtPort = new System.Windows.Forms.TextBox();
this.btnStartServer = new System.Windows.Forms.Button();
this.btnConnectClient = new System.Windows.Forms.Button();
this.txtSend = new System.Windows.Forms.TextBox();
this.btnSend = new System.Windows.Forms.Button();
this.txtLog = new System.Windows.Forms.TextBox();
三、核心功能说明
-
协议切换
-
支持TCP/UDP协议一键切换,界面元素动态调整
-
自动更新控件状态(如TCP模式下显示连接按钮)
-
-
多线程处理
-
使用
async/await实现异步通信,避免UI卡顿 -
独立线程处理接收操作(
ReceiveUdpMessages和HandleTcpClient)
-
-
工业级优化
-
自动重连机制(TCP客户端断开后尝试重连)
-
数据缓冲区管理(4KB缓冲区防止数据溢出)
-
-
日志系统
-
彩色日志显示(红色错误/绿色发送/蓝色接收)
-
时间戳记录和滚动显示
-
参考代码 C#网络调试助手源码(TCP/UDP) www.youwenfan.com/contentcnq/57460.html
四、扩展功能建议
-
数据保存
// 添加日志保存功能 private void btnSaveLog_Click(object sender, EventArgs e) { using (StreamWriter writer = new StreamWriter("debug.log", true)) { writer.Write(txtLog.Text); } } -
HEX显示模式
// 在ShowLog方法中添加HEX转换 string hexString = BitConverter.ToString(Encoding.UTF8.GetBytes(message)); ShowLog($"HEX: {hexString}", Color.Magenta); -
心跳检测
// 添加定时心跳检测 private async Task HeartbeatCheck() { while (isClientConnected) { await Task.Delay(5000); await tcpClient.GetStream().WriteAsync(new byte[] { 0x00 }, 0, 1); } }
五、使用说明
-
启动服务端
-
选择TCP/UDP协议
-
输入本地IP和端口(默认8080)
-
点击"启动服务端"按钮
-
-
连接客户端
-
TCP模式下填写目标IP和端口
-
点击"连接客户端"按钮
-
-
数据收发
-
输入文本后点击"发送"按钮
-
接收数据实时显示在日志区域
-
六、注意事项
-
防火墙设置
- 确保防火墙允许程序通过指定端口通信
-
数据编码
- 默认使用UTF-8编码,可修改为
Encoding.ASCII等格式
- 默认使用UTF-8编码,可修改为
-
异常处理
- 生产环境需添加更多异常捕获逻辑
浙公网安备 33010602011771号