C#网络编程完全指南:从Socket到TCP/UDP实战应用
C#网络编程完全指南:从Socket到TCP/UDP实战应用
-
- 1. 网络编程基础概念
-
- 什么是Socket?
- TCP vs UDP 核心区别
- 2. TCP编程详解
-
- TCP服务端 - 像"客服中心"
- TCP客户端 - 像"打电话的人"
- 3. UDP编程详解
-
- UDP服务端 - 像"信箱"
- UDP客户端 - 像"寄信人"
- 4. 三次握手与四次分手详解
-
- TCP三次握手 - 像"打电话确认"
- TCP四次分手 - 像"礼貌挂电话"
- 5. 实际开发中的应用场景
-
- TCP应用场景
-
- 1. 网页浏览 (HTTP/HTTPS)
- 2. 文件传输
- 3. 数据库连接
- UDP应用场景
-
- 1. 视频直播/语音通话
- 2. 在线游戏
- 3. DNS查询
- 6. 完整实战示例
-
- 简易聊天程序 (TCP)
- 7. 学习建议和下一步
-
- 给初学者的建议:
- 下一步学习方向:
- TCP vs UDP 全面对比:用生活化的例子彻底讲明白!
-
- 核心区别:一句话总结
- 详细对比表格
- 生活化比喻:彻底理解
-
- TCP - 像"打电话"
- UDP - 像"发短信"
- 技术层面深度对比
-
- TCP的数据传输机制
- UDP的数据传输机制
- 实际代码对比
-
- TCP服务端代码示例
- UDP服务端代码示例
- 应用场景对比
-
- 必须用TCP的场景
-
- 1. 文件传输
- 2. 网页浏览
- 3. 电子邮件
- 必须用UDP的场景
-
- 1. 视频直播
- 2. 在线游戏
- 3. DNS查询
- 性能对比测试
-
- 延迟对比
- 带宽利用率对比
- 选择指南:什么时候用什么?
-
- 选择TCP的情况:
- 选择UDP的情况:
- 特殊情况:在UDP上实现可靠性
- 总结
今天给大家分享的是网络编程核心概念
1. 网络编程基础概念
什么是Socket?
Socket(套接字) 就像是网络世界的"电话插座":
- 打电话需要:电话机 + 电话号码 + 拨号
- 网络通信需要:应用程序 + IP地址 + 端口号 + Socket
// 简单比喻
Socket = IP地址(哪个建筑) + 端口号(哪个房间)
TCP vs UDP 核心区别
| 特性 | TCP (传输控制协议) | UDP (用户数据报协议) |
|---|---|---|
| 连接方式 | 面向连接(要先建立连接) | 无连接(直接发送) |
| 可靠性 | 可靠,保证数据顺序和完整 | 不可靠,可能丢失或乱序 |
| 速度 | 较慢(要确认和重传) | 很快(发了就不管) |
| 使用场景 | 文件传输、网页浏览、邮件 | 视频直播、游戏、DNS查询 |
生活化比喻:
- TCP 像打电话:要先拨号接通,确认对方在听,说完要等对方回应
- UDP 像发短信:直接发送,不管对方收没收到,不要求回复
2. TCP编程详解
TCP服务端 - 像"客服中心"
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class TcpServerExample
{static void Main(){Console.WriteLine("=== TCP服务端启动 ===");// 1. 创建服务端Socket - 像安装一部电话总机TcpListener server = new TcpListener(IPAddress.Any, 8888);try{// 2. 启动服务 - 开启电话总机server.Start();Console.WriteLine("服务端已启动,等待客户端连接...");// 3. 接受客户端连接 - 等待电话打入TcpClient client = server.AcceptTcpClient();Console.WriteLine("客户端已连接!");// 4. 获取网络流 - 建立通话通道NetworkStream stream = client.GetStream();// 5. 接收客户端消息byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine($"收到客户端消息: {message}");// 6. 回复客户端string response = "你好客户端,我已收到你的消息!";byte[] responseData = Encoding.UTF8.GetBytes(response);stream.Write(responseData, 0, responseData.Length);Console.WriteLine("已回复客户端");// 7. 关闭连接stream.Close();client.Close();server.Stop();}catch (Exception ex){Console.WriteLine($"出错: {ex.Message}");}Console.WriteLine("按任意键退出...");Console.ReadKey();}
}
TCP客户端 - 像"打电话的人"
using System;
using System.Net.Sockets;
using System.Text;class TcpClientExample
{static void Main(){Console.WriteLine("=== TCP客户端启动 ===");try{// 1. 创建客户端 - 准备打电话TcpClient client = new TcpClient();// 2. 连接服务端 - 拨号client.Connect("127.0.0.1", 8888);Console.WriteLine("已连接到服务端!");// 3. 获取网络流 - 建立通话NetworkStream stream = client.GetStream();// 4. 发送消息给服务端string message = "你好服务端,我是客户端!";byte[] data = Encoding.UTF8.GetBytes(message);stream.Write(data, 0, data.Length);Console.WriteLine("消息已发送");// 5. 接收服务端回复byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine($"收到服务端回复: {response}");// 6. 关闭连接stream.Close();client.Close();}catch (Exception ex){Console.WriteLine($"出错: {ex.Message}");}Console.WriteLine("按任意键退出...");Console.ReadKey();}
}
3. UDP编程详解
UDP服务端 - 像"信箱"
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class UdpServerExample
{