C# socket networkstream 接收数据
在 C# 中,Socket
和 NetworkStream
是用于网络通信的重要类。Socket
类用于创建网络连接,而 NetworkStream
类提供了对网络流的读取和写入操作。要接收数据,可以使用这些类结合使用,下面是详细的步骤和示例代码。
步骤概述
创建并配置 Socket
- 创建
Socket
实例,配置其 IP 地址、端口号等。 - 绑定到本地端口,监听进入的连接请求。
- 创建
接收连接请求
- 使用
Accept
方法接受来自客户端的连接。
- 使用
获取 NetworkStream
- 使用
Socket
对象的GetStream
方法获取NetworkStream
实例。
- 使用
读取数据
- 使用
NetworkStream
对象的Read
方法从流中读取数据。
- 使用
处理数据
- 处理接收到的数据并根据需求执行相关操作。
关闭连接
- 在通信完成后,关闭
NetworkStream
和Socket
连接。
- 在通信完成后,关闭
示例代码
以下是一个简单的 C# 服务器示例,演示如何使用 Socket
和 NetworkStream
接收数据:
csharpusing 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();
}
}
代码说明
创建 Socket 实例:
csharpSocket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
创建一个 TCP 连接的
Socket
对象。绑定到本地端口:
csharpIPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 11000); listener.Bind(localEndPoint);
将
Socket
绑定到 IP 地址和端口上。监听连接请求:
csharplistener.Listen(10);
监听连接请求,队列长度为 10。
接受连接请求:
csharpSocket handler = listener.Accept();
接受客户端的连接请求,返回一个新的
Socket
对象。获取 NetworkStream:
csharpNetworkStream networkStream = new NetworkStream(handler);
从
Socket
获取NetworkStream
实例,用于读写操作。读取数据:
csharpwhile ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0) { string receivedData = Encoding.ASCII.GetString(buffer, 0, bytesRead); Console.WriteLine("收到数据: " + receivedData); }
从
NetworkStream
读取数据并转换为字符串,显示接收到的数据。发送确认响应(可选):
csharpstring response = "数据已收到."; byte[] responseBytes = Encoding.ASCII.GetBytes(response); networkStream.Write(responseBytes, 0, responseBytes.Length);
向客户端发送确认响应。
关闭连接:
csharpnetworkStream.Close(); handler.Shutdown(SocketShutdown.Both); handler.Close(); listener.Close();
关闭
NetworkStream
和Socket
连接。
关键点
- Socket:用于网络通信的基础设施,负责建立连接、发送和接收数据。
- NetworkStream:提供对网络数据流的访问,通常通过
Socket
对象获取。 - 读取数据:通过
NetworkStream.Read
方法从流中读取数据,处理读取的数据。
关键字
C#, Socket, NetworkStream, 接收数据, Read
方法, GetStream
, Accept
方法, 数据处理, 网络编程, Encoding.ASCII
, 关闭连接