跳到主要内容

C# 网络流

介绍

在网络编程中,网络流(Network Stream) 是一种用于在网络上传输数据的机制。它允许程序通过网络发送和接收字节流,是实现客户端和服务器之间通信的核心组件之一。C# 提供了 NetworkStream 类,它是 System.Net.Sockets 命名空间的一部分,专门用于处理基于 TCP 协议的网络通信。

在本教程中,我们将逐步学习如何使用 NetworkStream 类,并通过实际案例展示其应用场景。


什么是网络流?

网络流是建立在 TCP 连接之上的数据流。它允许客户端和服务器之间通过字节流的形式进行双向通信。NetworkStream 类封装了底层的套接字操作,提供了简单易用的接口来发送和接收数据。

备注

NetworkStream 是基于 TCP 协议的,因此它提供了可靠的、面向连接的通信。如果需要使用 UDP 协议,则需要使用 UdpClient 类。


使用 NetworkStream 的基本步骤

  1. 建立 TCP 连接:首先,客户端和服务器需要通过 TcpClientTcpListener 建立 TCP 连接。
  2. 获取 NetworkStream 对象:通过 TcpClient.GetStream() 方法获取 NetworkStream 对象。
  3. 发送和接收数据:使用 NetworkStream.Write()NetworkStream.Read() 方法发送和接收数据。
  4. 关闭连接:通信完成后,关闭 NetworkStreamTcpClient

代码示例:客户端和服务器通信

以下是一个简单的客户端和服务器通信的示例。服务器监听客户端的连接请求,客户端发送一条消息,服务器接收并回复。

服务器端代码

csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class Server
{
static void Main()
{
TcpListener server = new TcpListener(IPAddress.Any, 8888);
server.Start();
Console.WriteLine("服务器已启动,等待客户端连接...");

TcpClient client = server.AcceptTcpClient();
Console.WriteLine("客户端已连接!");

NetworkStream stream = client.GetStream();

// 接收客户端消息
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到客户端消息: " + message);

// 发送回复
string response = "你好,客户端!";
byte[] responseData = Encoding.UTF8.GetBytes(response);
stream.Write(responseData, 0, responseData.Length);

// 关闭连接
stream.Close();
client.Close();
server.Stop();
}
}

客户端代码

csharp
using System;
using System.Net.Sockets;
using System.Text;

class Client
{
static void Main()
{
TcpClient client = new TcpClient("127.0.0.1", 8888);
Console.WriteLine("已连接到服务器!");

NetworkStream stream = client.GetStream();

// 发送消息
string message = "你好,服务器!";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);

// 接收服务器回复
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到服务器回复: " + response);

// 关闭连接
stream.Close();
client.Close();
}
}

运行结果

  1. 启动服务器程序,等待客户端连接。
  2. 启动客户端程序,连接到服务器并发送消息。
  3. 服务器接收消息并回复,客户端显示回复内容。

实际应用场景

网络流在实际开发中有广泛的应用,例如:

  • 聊天应用程序:客户端和服务器通过 NetworkStream 实时交换消息。
  • 文件传输:通过流将文件从客户端上传到服务器或从服务器下载到客户端。
  • 远程控制:通过网络流发送控制命令,例如远程桌面或 IoT 设备控制。

总结

NetworkStream 是 C# 网络编程中非常重要的工具,它为基于 TCP 的通信提供了简单而强大的接口。通过本教程,您已经学会了如何使用 NetworkStream 实现客户端和服务器之间的基本通信。

提示

为了进一步巩固知识,您可以尝试以下练习:

  1. 扩展上述示例,实现多客户端连接。
  2. 使用 NetworkStream 实现文件传输功能。
  3. 研究 NetworkStream 的异步方法(如 ReadAsyncWriteAsync),并实现异步通信。

附加资源