C# socket networkstream 接收数据

在 C# 中,SocketNetworkStream 是用于网络通信的重要类。Socket 类用于创建网络连接,而 NetworkStream 类提供了对网络流的读取和写入操作。要接收数据,可以使用这些类结合使用,下面是详细的步骤和示例代码。

步骤概述

  1. 创建并配置 Socket

    • 创建 Socket 实例,配置其 IP 地址、端口号等。
    • 绑定到本地端口,监听进入的连接请求。
  2. 接收连接请求

    • 使用 Accept 方法接受来自客户端的连接。
  3. 获取 NetworkStream

    • 使用 Socket 对象的 GetStream 方法获取 NetworkStream 实例。
  4. 读取数据

    • 使用 NetworkStream 对象的 Read 方法从流中读取数据。
  5. 处理数据

    • 处理接收到的数据并根据需求执行相关操作。
  6. 关闭连接

    • 在通信完成后,关闭 NetworkStreamSocket 连接。

示例代码

以下是一个简单的 C# 服务器示例,演示如何使用 SocketNetworkStream 接收数据:

csharp
using System; using System.Net; using System.Net.Sockets; using System.Text; class Program { static void Main() { // 创建一个 Socket 实例 Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 绑定到本地端口 IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 11000); listener.Bind(localEndPoint); // 开始监听连接请求 listener.Listen(10); Console.WriteLine("等待连接..."); // 接受连接请求 Socket handler = listener.Accept(); Console.WriteLine("客户端已连接."); // 获取 NetworkStream NetworkStream networkStream = new NetworkStream(handler); // 创建一个缓冲区来接收数据 byte[] buffer = new byte[1024]; int bytesRead; // 读取数据 while ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0) { // 转换为字符串并显示 string receivedData = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("收到数据: " + receivedData); // 发送确认响应(可选) string response = "数据已收到."; byte[] responseBytes = Encoding.ASCII.GetBytes(response); networkStream.Write(responseBytes, 0, responseBytes.Length); } // 关闭 NetworkStream 和 Socket networkStream.Close(); handler.Shutdown(SocketShutdown.Both); handler.Close(); listener.Close(); } }

代码说明

  1. 创建 Socket 实例

    csharp
    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    创建一个 TCP 连接的 Socket 对象。

  2. 绑定到本地端口

    csharp
    IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 11000); listener.Bind(localEndPoint);

    Socket 绑定到 IP 地址和端口上。

  3. 监听连接请求

    csharp
    listener.Listen(10);

    监听连接请求,队列长度为 10。

  4. 接受连接请求

    csharp
    Socket handler = listener.Accept();

    接受客户端的连接请求,返回一个新的 Socket 对象。

  5. 获取 NetworkStream

    csharp
    NetworkStream networkStream = new NetworkStream(handler);

    Socket 获取 NetworkStream 实例,用于读写操作。

  6. 读取数据

    csharp
    while ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0) { string receivedData = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("收到数据: " + receivedData); }

    NetworkStream 读取数据并转换为字符串,显示接收到的数据。

  7. 发送确认响应(可选):

    csharp
    string response = "数据已收到."; byte[] responseBytes = Encoding.ASCII.GetBytes(response); networkStream.Write(responseBytes, 0, responseBytes.Length);

    向客户端发送确认响应。

  8. 关闭连接

    csharp
    networkStream.Close(); handler.Shutdown(SocketShutdown.Both); handler.Close(); listener.Close();

    关闭 NetworkStreamSocket 连接。

关键点

  1. Socket:用于网络通信的基础设施,负责建立连接、发送和接收数据。
  2. NetworkStream:提供对网络数据流的访问,通常通过 Socket 对象获取。
  3. 读取数据:通过 NetworkStream.Read 方法从流中读取数据,处理读取的数据。

关键字

C#, Socket, NetworkStream, 接收数据, Read 方法, GetStream, Accept 方法, 数据处理, 网络编程, Encoding.ASCII, 关闭连接