自学内容网 自学内容网

C# 网络编程技术

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 的速度较快,适合需要低延迟的场景。


原文地址:https://blog.csdn.net/weixin_51169222/article/details/143701951

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!