当前位置: 首页 > article >正文

C# 网络编程技术

文章目录

  • 1.网络编程的基础概念
  • 2.TCP 通信
    • 2.1 构建 TCP 服务器
    • 2.2 构建 TCP 客户端
  • 3.UDP 通信
    • 3.1 构建 UDP 服务器
    • 3.2 构建 UDP 客户端
  • 4.HTTP 通信
    • 4.1 使用 HttpClient 发起 HTTP 请求
    • 4.2 使用 HttpListener 构建简单的 HTTP 服务器
  • 5. 异步网络编程
  • 6. 网络编程的常见案例
    • 6.1 简单的聊天应用
    • 6.2 文件传输
    • 6.3 实时数据流

1.网络编程的基础概念

    网络编程涉及在计算机之间传输数据。主要有以下几种通信协议:

  • TCP(Transmission Control Protocol):一种可靠的、基于连接的协议,提供流式的数据传输,适合文件传输、聊天应用等需要确保数据完整性的场景。
  • UDP(User Datagram Protocol):一种不可靠的、无连接的协议,数据通过“数据报”的形式传输,适合视频流等不需要数据完全准确的应用。
  • HTTP(Hypertext Transfer Protocol):基于请求-响应模式的协议,用于 Web 开发和网络服务。
         C# 中的 System.Net 和 System.Net.Sockets 命名空间提供了对这些协议的支持,允许开发者构建不同类型的网络应用程序。

2.TCP 通信

    TCP 是一种可靠的传输协议,通过建立连接来确保数据按顺序、无丢失地传输。C# 中的 TcpClient 和 TcpListener 类用于 TCP 通信。

2.1 构建 TCP 服务器

    TCP 服务器用于接收客户端的连接请求。以下是一个基本的 TCP 服务器实现:

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

class TcpServer
{
    public static void StartServer()
    {
        TcpListener listener = new TcpListener(IPAddress.Any, 8000);
        listener.Start();
        Console.WriteLine("Server started. Waiting for connection...");

        while (true)
        {
            TcpClient client = listener.AcceptTcpClient();
            Console.WriteLine("Client connected.");

            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("Received message: " + message);

            byte[] response = Encoding.UTF8.GetBytes("Message received.");
            stream.Write(response, 0, response.Length);

            client.Close();
        }
    }
}

2.2 构建 TCP 客户端

    TCP 客户端用于连接服务器并发送数据:

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

class TcpClientExample
{
    public static void StartClient()
    {
        TcpClient client = new TcpClient("127.0.0.1", 8000);
        NetworkStream stream = client.GetStream();

        string message = "Hello, server!";
        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("Server response: " + response);
        client.Close();
    }
}

3.UDP 通信

    UDP 是一种无连接协议,适合传输数据量小、对实时性要求高的场景。C# 中的 UdpClient 类可用于实现 UDP 通信。

3.1 构建 UDP 服务器

    UDP 服务器接收客户端的数据报文:

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

class UdpServer
{
    public static void StartServer()
    {
        UdpClient server = new UdpClient(8000);
        IPEndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 0);
        Console.WriteLine("UDP Server started.");

        while (true)
        {
            byte[] data = server.Receive(ref clientEndPoint);
            string message = Encoding.UTF8.GetString(data);
            Console.WriteLine("Received: " + message);

            byte[] response = Encoding.UTF8.GetBytes("Message received.");
            server.Send(response, response.Length, clientEndPoint);
        }
    }
}

3.2 构建 UDP 客户端

    UDP 客户端可以发送数据到服务器:

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

class UdpClientExample
{
    public static void StartClient()
    {
        UdpClient client = new UdpClient();
        IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);

        string message = "Hello, UDP server!";
        byte[] data = Encoding.UTF8.GetBytes(message);
        client.Send(data, data.Length, serverEndPoint);

        byte[] response = client.Receive(ref serverEndPoint);
        Console.WriteLine("Server response: " + Encoding.UTF8.GetString(response));

        client.Close();
    }
}

4.HTTP 通信

    HTTP 是应用层协议,广泛用于 Web 开发。C# 提供了 HttpClient 类来发起 HTTP 请求,并且可以创建基于 HTTP 的 Web 服务器。

4.1 使用 HttpClient 发起 HTTP 请求

    以下是一个使用 HttpClient 向 API 发起 GET 请求的示例:

using System;
using System.Net.Http;
using System.Threading.Tasks;

class HttpClientExample
{
    public static async Task SendRequest()
    {
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync("https://jsonplaceholder.typicode.com/posts/1");

        if (response.IsSuccessStatusCode)
        {
            string responseBody = await response.Content.ReadAsStringAsync();
            Console.WriteLine(responseBody);
        }
    }
}

4.2 使用 HttpListener 构建简单的 HTTP 服务器

    HttpListener 可用于创建一个简单的 HTTP 服务器:

using System;
using System.Net;
using System.Text;

class SimpleHttpServer
{
    public static void StartServer()
    {
        HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://localhost:8080/");
        listener.Start();
        Console.WriteLine("HTTP Server started.");

        while (true)
        {
            HttpListenerContext context = listener.GetContext();
            HttpListenerRequest request = context.Request;
            HttpListenerResponse response = context.Response;

            string responseString = "<html><body><h1>Hello, HTTP World!</h1></body></html>";
            byte[] buffer = Encoding.UTF8.GetBytes(responseString);

            response.ContentLength64 = buffer.Length;
            response.OutputStream.Write(buffer, 0, buffer.Length);
            response.OutputStream.Close();
        }
    }
}

5. 异步网络编程

    异步编程在网络编程中十分重要,能有效提升应用的性能。以下是一个异步 TCP 客户端的示例:

using System;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

class AsyncTcpClient
{
    public static async Task StartClient()
    {
        TcpClient client = new TcpClient();
        await client.ConnectAsync("127.0.0.1", 8000);

        NetworkStream stream = client.GetStream();
        string message = "Hello, async server!";
        byte[] data = Encoding.UTF8.GetBytes(message);

        await stream.WriteAsync(data, 0, data.Length);

        byte[] buffer = new byte[1024];
        int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
        string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);

        Console.WriteLine("Server response: " + response);
        client.Close();
    }
}

6. 网络编程的常见案例

6.1 简单的聊天应用

    一个简单的聊天应用可以基于 TCP 实现。客户端向服务器发送消息,服务器将消息广播给所有连接的客户端。

6.2 文件传输

    TCP 适合传输大文件,可以通过分块传输的方式发送文件数据。客户端发送文件块数据,服务器接收后写入文件。

6.3 实时数据流

    视频流或实时传感器数据可使用 UDP 传输,因为 UDP 的速度较快,适合需要低延迟的场景。


http://www.kler.cn/a/391394.html

相关文章:

  • Python调用go语言编译的库
  • 实现nacos配置修改后无需重启服务--使用@RefreshScope注解
  • 【大模型系列篇】数字人音唇同步模型——腾讯开源MuseTalk
  • <代码随想录> 算法训练营-2025.01.09
  • 《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》
  • 智能物流升级利器——SAIL-RK3576核心板AI边缘计算网关设计方案(一)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-03
  • 《数据结构》--二叉树【下】
  • 上海亚商投顾:沪指放量调整 全市场近3800只个股下跌
  • PICO+Unity MR空间锚点
  • python设计模式
  • 中国地区数据要素化水平数据集(2010-2023年)
  • 安全升级,从漏洞扫描开始:专业级网络安全服务
  • flutter调试
  • D3入门:学习思维导图 + 99个中文API详解
  • 【C++】 C++游戏设计---五子棋小游戏
  • Qt生成coredump文件(支持arm和x86架构)
  • opencv保姆级讲解——光学学符识别(OCR)(4)
  • Docker部署Nginx服务器并实现HTTPS自动重定向
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-成绩排序
  • 【ECMAScript标准规范】
  • 「QT」基础数据类 之 QVariant 通用数据类
  • PHY6235超低功耗蓝牙和专有2.4G应用的SOC芯片内置MCU
  • Git 中的 patch 功能
  • 生成式模型的热点新闻和进展
  • 第8章利用CSS制作导航菜单