在 C# 中实现简单的 TCP Socket 通信,主要依赖于 System.Net.Sockets 命名空间中的 TcpClient 和 TcpListener 类。通过这两个类,可以快速搭建一个基于客户端-服务器模型的通信程序。
1. 创建 TCP 服务器端
服务器负责监听指定端口,等待客户端连接,并接收和发送数据。
使用 TcpListener 监听客户端请求:
指定 IP 地址和端口号启动监听 调用 AcceptTcpClient() 等待客户端接入 通过 NetworkStream 读取或写入数据示例代码:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
<p>class TcpServer
{
static void Main()
{
TcpListener listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
Console.WriteLine("服务器已启动,等待客户端连接...");</p><pre class="brush:php;toolbar:false;"> using (TcpClient client = listener.AcceptTcpClient())
{
Console.WriteLine("客户端已连接。");
using (NetworkStream stream = client.GetStream())
{
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string message = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到消息:" + message);
// 回复客户端
string response = "服务器已收到你的消息:" + message;
byte[] responseBytes = System.Text.Encoding.UTF8.GetBytes(response);
stream.Write(responseBytes, 0, responseBytes.Length);
}
}
listener.Stop();
Console.WriteLine("服务器已关闭。");
}}
2. 创建 TCP 客户端
客户端用于连接服务器,发送数据并接收响应。
使用 TcpClient 连接到服务器:
指定服务器 IP 和端口进行连接 通过 NetworkStream 发送和接收数据示例代码:
using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
<p>class TcpClientApp
{
static void Main()
{
using (TcpClient client = new TcpClient())
{
client.Connect(IPAddress.Loopback, 8080); // 连接本地 8080 端口
Console.WriteLine("已连接到服务器。");</p><pre class="brush:php;toolbar:false;"> using (NetworkStream stream = client.GetStream())
{
// 发送消息
string message = "Hello, Server!";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
Console.WriteLine("消息已发送。");
// 接收回复
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到回复:" + response);
}
}
Console.WriteLine("连接已关闭。");
}}
3. 注意事项与优化建议
虽然上述例子实现了基本通信,但在实际应用中需要注意以下几点:
使用异步方法(如 BeginConnect / BeginRead)避免阻塞主线程 添加异常处理(try-catch)应对网络中断或连接失败 定义通信协议,比如消息长度前缀,防止粘包问题 及时释放资源,确保 TcpClient 和 TcpListener 被正确关闭4. 测试运行步骤
要测试这个简单通信程序:
先运行服务器端程序 再运行客户端程序 观察控制台输出是否正常收发消息如果都在本机测试,使用 IPAddress.Loopback 或 127.0.0.1 即可。
基本上就这些。C# 的 TCP Socket 编程接口设计清晰,配合 TcpListener 和 TcpClient,能快速实现稳定通信。不复杂但容易忽略异常处理和资源释放。
