一、什么是Socket编程
- Socket字面含义
Socket英文本义为插座,插座的作用是建立两端之间的连接,因此在网络编程中被引申为网络通信端点。 - Socket编程定义
借助 TCP / UDP 网络协议,实现多台主机之间的数据通信。 - 通俗理解
编写程序,让两台或多台电脑互相收发数据,典型案例:局域网在线聊天工具。
类比理解:插座=网络接口;插头=另一台主机,插好插头=建立网络连接。
为了更好学习,我们用一个示例来边实现边学习。
二、简易聊天工具设计方案
架构模型:客户端/服务端(C/S)
- 服务端(Server)
- 绑定本机指定端口,持续监听网络接入请求
- 等待其他电脑发起连接
- 监听到客户端接入后,建立通信链路
- 客户端(Client)
主动根据服务端IP地址+端口号,发起连接请求 - 通信目标:两台电脑实时收发文字消息,实现即时聊天
工作流程
- 服务端启动 → 开启端口监听
- 客户端启动 → 主动连接服务端IP+端口
- 连接建立成功后,双方互相发送、接收消息
下面是一个最简单的例子
服务端
// 1. 创建TcpListener监听IP与端口
TcpListener listener = new TcpListener(IPAddress.Any, 8899);
listener.Start();
// 2. 等待客户端连接
TcpClient client = await listener.AcceptTcpClientAsync();
// 3. 获取网络流,循环收发消息
NetworkStream stream = client.GetStream();
Code language: JavaScript (javascript)
客户端
// 连接服务端IP与端口
TcpClient client = new TcpClient();
await client.ConnectAsync("192.168.1.100",8899);
NetworkStream stream = client.GetStream();Code language: JavaScript (javascript)
Next: 服务端端口监听