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

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

本示例展示了基于 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。