Socket 通讯
Socket 是 C# 里用来实现两台设备之间网络通信的工具,不管是电脑、手机、服务器,只要联网,想互相发数据,99% 都用 Socket。
1、服务器 = 接电话的人
必须先有电话号码(IP 地址)
必须开机等着别人打(监听)
2、客户端 = 打电话的人
知道对方号码
主动拨号(连接)
3、打通后 = Socket 连接建立
你说一句,我听一句
我说一句,你听一句
这个双向通话通道,就是 Socket
4、挂电话 = 关闭 Socket
Socket 通讯的两种模式
1.TCP(靠谱版,像打电话)
必须先连接成功才能说话
数据不会丢、不会乱、不会错
速度稍慢,但稳定安全
适合:聊天、传文件、登录、控制指令
2. UDP(快传版,像发短信 / 广播)
不用连接,直接发
可能丢消息、可能乱序
速度极快
适合:视频直播、游戏实时位置、语音
C# Socket 工作流程
服务器(等着别人连)
拿个手机号 → IP + 端口
开机等着 → 监听(Listen)
有人拨号 → 接受连接(Accept)
开始聊天 → 收数据 / 发数据
挂电话 → 关闭
客户端(主动找人)
知道对方手机号 → IP + 端口
拨号 → 连接(Connect)
聊天 → 发数据 / 收数据
挂电话 → 关闭
——————————————————————————————————————————————————————————————
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
// 服务端:等着别人来连接
class SocketServer
{
static void Main()
{
// 1. 创建 Socket 对象(打电话的机器)
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 2. 绑定 IP 和 端口(相当于装电话、定号码)
IPAddress ip = IPAddress.Parse("127.0.0.1"); // 本机地址
IPEndPoint endPoint = new IPEndPoint(ip, 8888); // 端口 8888
serverSocket.Bind(endPoint);
// 3. 开始监听(等着别人打电话)
serverSocket.Listen(10);
Console.WriteLine("服务已启动,等待客户端连接...");
// 4. 接受客户端连接(有人打电话,接起来)
Socket clientSocket = serverSocket.Accept();
Console.WriteLine("客户端已连接!");
// 5. 接收客户端发过来的消息
byte[] buffer = new byte[1024]; // 装数据的盒子
int length = clientSocket.Receive(buffer); // 收数据
string msg = Encoding.UTF8.GetString(buffer, 0, length);
Console.WriteLine("客户端说:" + msg);
// 6. 给客户端回消息
string sendMsg = "收到啦!我是服务端";
clientSocket.Send(Encoding.UTF8.GetBytes(sendMsg));
// 7. 关闭
clientSocket.Close();
serverSocket.Close();
Console.ReadKey();
}
}
——————————————————————————————————————————————————————————————
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
// 客户端:主动去找服务端
class SocketClient
{
static void Main()
{
// 1. 创建客户端 Socket
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 2. 连接服务端(拨号)
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ip, 8888);
clientSocket.Connect(endPoint);
Console.WriteLine("成功连接服务端!");
// 3. 给服务端发消息
string sendMsg = "你好呀,我是客户端!";
clientSocket.Send(Encoding.UTF8.GetBytes(sendMsg));
// 4. 接收服务端的回复
byte[] buffer = new byte[1024];
int length = clientSocket.Receive(buffer);
string msg = Encoding.UTF8.GetString(buffer, 0, length);
Console.WriteLine("服务端说:" + msg);
// 5. 关闭
clientSocket.Close();
Console.ReadKey();
}
}
第一个参数:AddressFamily.InterNetwork
意思:使用 IPv4 地址
大白话:
“用咱们最常见的那种 IP 地址格式,比如 127.0.0.1”
InterNetwork = IPv4(99% 项目都用这个)
作用:告诉程序你要用哪种网络地址格式
第二个参数:SocketType.Stream
意思:流式 Socket
大白话:
“像水流一样连续传输数据,保证数据不乱、不丢”
Stream = 流 = 可靠传输
对应 TCP 这种可靠连接
如果是发广播、快传,才会用 Dgram(对应 UDP)
第三个参数:ProtocolType.Tcp
意思:使用 TCP 协议
大白话:
“选择靠谱的通话方式:先连接,再收发,数据保证送到”
Tcp:稳定、安全、不丢包(聊天、传文件用)
Udp:快、但可能丢包(直播、游戏用)

浙公网安备 33010602011771号