C#怎么进行TCP Socket编程 C# Socket网络通信方法

来源:这里教程网 时间:2026-02-21 17:34:32 作者:

在C#中进行TCP Socket编程,核心是使用

System.Net.Sockets
命名空间下的
TcpClient
(简化客户端)和
TcpListener
(简化服务端),或更底层的
Socket
类(灵活但需手动处理连接、缓冲、粘包等)。推荐初学者从
TcpClient
/
TcpListener
入手,逻辑清晰、代码简洁。

用TcpListener搭建简易TCP服务端

服务端负责监听指定IP和端口,接受客户端连接,并收发数据。

创建
TcpListener
对象,绑定本地IP和端口(如
IPAddress.Any
+
8080
调用
Start()
开始监听
AcceptTcpClient()
阻塞等待连接;返回
TcpClient
实例代表该客户端会话
通过
TcpClient.GetStream()
获取
NetworkStream
,用
Read()
/
Write()
收发字节数据
注意:单次
Read()
不保证读完全部消息,需自行处理分包/粘包(例如加长度头或换行符分隔)

用TcpClient编写TCP客户端

客户端主动连接服务端,发送请求并接收响应。

创建
TcpClient
,调用
Connect("127.0.0.1", 8080)
建立连接
检查
Connected
属性确认连接成功
同样用
GetStream()
拿到
NetworkStream
,写入数据后可调用
Flush()
确保发送
读取时建议用
ReadAsync()
避免阻塞主线程,配合
await
更安全
记得调用
Close()
Dispose()
释放资源

用原生Socket实现更精细控制

当需要异步非阻塞、自定义协议、或跨平台兼容性更强时,直接使用

Socket
类。

服务端:创建
Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Bind()
+
Listen()
,再用
AcceptAsync()
BeginAccept()
处理连接
客户端:创建Socket后调用
ConnectAsync()
BeginConnect()
发起连接
收发统一用
SendAsync()
/
ReceiveAsync()
(推荐)或
BeginSend()
/
EndSend()
必须自己管理缓冲区、连接状态、异常重连和心跳保活

实用建议与注意事项

真实项目中别只写“Hello World”式通信,这些点容易踩坑:

编码统一:收发字符串务必约定编码(如
Encoding.UTF8
),避免中文乱码
异常防护:网络中断、连接拒绝、远程关闭都会抛异常,
try-catch
要覆盖
SocketException
IOException
线程安全:多个客户端共用一个服务端时,每个连接应在独立线程或
Task
中处理,避免阻塞监听线程
资源释放
TcpClient
NetworkStream
Socket
都实现
IDisposable
,用
using
或显式
Dispose()
不要忽略心跳:长连接需定时发送空包或PING/PONG帧,防止NAT超时断连

基本上就这些。从

TcpListener
+
TcpClient
上手最快,理解原理后再切入
Socket
类做高并发或定制化开发更稳妥。

相关推荐