C# Socket 编程入门:服务器与客户端通信实战

落日邮差
落日邮差
发布时间:2026-10-13 | 2人浏览过
原创

本示例展示了基于 C# 的 TCP Socket 通信基础实现。通过服务端监听请求、开启线程处理连接,以及客户端主动连接并发送数据的过程,解析了构建最简单网络应用的核心步骤。

核心思路与准备

本示例使用 System.Net.Sockets 命名空间中的 Socket 类来建立面向连接的通信。虽然该代码主要用于演示套接字编程的基本思路,但在实际项目中还需考虑消息边界处理、端口冲突检测及异常容错等问题。

操作前请确保已安装 .NET SDK 或 Visual Studio 开发环境,并能编译运行 C# 控制台应用程序。我们将分别编写服务端(Server)和客户端(Client)两个控制台程序。

第一步:配置与服务端启动

服务端的任务是绑定特定 IP 和端口进行监听,并等待客户端的连接请求。

  1. 引入依赖命名空间:需使用以下三个命名空间以支持网络访问和线程处理。
using System.Net.Sockets;
using System.Net;
using System.Threading;
  1. 初始化监听参数:定义存储接收缓冲区的字节数组,指定监听端口为 8885,并创建用于监听的 serverSocket 实例。
private static byte[] result = new byte[1024];
private static int myProt = 8885; // 监听端口
static Socket serverSocket;
  1. 绑定地址与开始监听:在 Main 方法中,解析目标 IP 地址(此处 "127.0.0.1" 为本地回环测试地址),将其绑定到 socket,设置最多允许 10 个排队请求,最后启动后台线程执行监听。
IPAddress ip = IPAddress.Parse("127.0.0.1");
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, myProt));
serverSocket.Listen(10);
Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());
Thread myThread = new Thread(ListenClientConnect);
myThread.Start();
Console.ReadLine();

第二步:客户端连接与数据交互

客户端负责发起连接,并在连接成功后向服务器发送循环数据,同时接收服务器的初始回应。

  1. 客户端初始化:同样引入必要的网络与线程命名空间。
using System.Net;
using System.Net.Sockets;
using System.Threading;
  1. 建立 TCP 连接:创建客户端 Socket 对象,尝试连接与服务端相同的 IP 和端口。try-catch 块用于捕获连接失败的情况,并在控制台打印提示信息。
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try {
    clientSocket.Connect(new IPEndPoint(ip, 8885));
    Console.WriteLine("连接服务器成功");
} catch {
    Console.WriteLine("连接服务器失败,请按回车键退出!");
    return;
}
  1. 收发数据流程:连接成功后,首先接收服务器发来的欢迎信息。随后进入一个循环,每隔一秒钟向服务器发送一次包含时间戳的消息,共发送 10 次。若发送过程中发生异常,则关闭连接并结束程序。
// 接收服务器反馈信息
int receiveLength = clientSocket.Receive(result);
Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveLength));

// 循环发送消息
for (int i = 0; i < 10; i++) {
    try {
        Thread.Sleep(1000);
        string sendMessage = "client send Message Hello" + DateTime.Now.ToString();
        clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));
        Console.WriteLine("向服务器发送消息:{0}" + sendMessage);
    } catch {
        clientSocket.Shutdown(SocketShutdown.Both);
        clientSocket.Close();
        break;
    }
}
Console.WriteLine("发送完毕,按回车键退出");
Console.ReadLine();

运行效果

编译成功后,先运行服务端(Server),再运行客户端(Client)。此时可以看到服务端控制台显示已连接客户端的消息,而客户端也会依次打印发送出去的信息。以下是测试时的通信截图:

该程序已在局域网环境(如 192.168.X.X 网段)内测试通过,修改对应的 IP 地址即可在不同设备间进行通信。

以上就是 C# Socket 实现服务端与客户端通信的详细内容,更多关于 C# 网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表