C# Socket 编程入门:服务器与客户端通信实战
本示例展示了基于 C# 的 TCP Socket 通信基础实现。通过服务端监听请求、开启线程处理连接,以及客户端主动连接并发送数据的过程,解析了构建最简单网络应用的核心步骤。
核心思路与准备
本示例使用 System.Net.Sockets 命名空间中的 Socket 类来建立面向连接的通信。虽然该代码主要用于演示套接字编程的基本思路,但在实际项目中还需考虑消息边界处理、端口冲突检测及异常容错等问题。
操作前请确保已安装 .NET SDK 或 Visual Studio 开发环境,并能编译运行 C# 控制台应用程序。我们将分别编写服务端(Server)和客户端(Client)两个控制台程序。
第一步:配置与服务端启动
服务端的任务是绑定特定 IP 和端口进行监听,并等待客户端的连接请求。
- 引入依赖命名空间:需使用以下三个命名空间以支持网络访问和线程处理。
using System.Net.Sockets;
using System.Net;
using System.Threading;
- 初始化监听参数:定义存储接收缓冲区的字节数组,指定监听端口为
8885,并创建用于监听的serverSocket实例。
private static byte[] result = new byte[1024];
private static int myProt = 8885; // 监听端口
static Socket serverSocket;
- 绑定地址与开始监听:在
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();
第二步:客户端连接与数据交互
客户端负责发起连接,并在连接成功后向服务器发送循环数据,同时接收服务器的初始回应。
- 客户端初始化:同样引入必要的网络与线程命名空间。
using System.Net;
using System.Net.Sockets;
using System.Threading;
- 建立 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;
}
- 收发数据流程:连接成功后,首先接收服务器发来的欢迎信息。随后进入一个循环,每隔一秒钟向服务器发送一次包含时间戳的消息,共发送 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# 网络编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













