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

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.mrgr.cn/news/70881.html

相关文章:

  • HTMLCSS:比赛记分卡
  • 再次讨论下孤注一掷
  • 低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能
  • Linux 查看端口和进程的常用命令(下)
  • 在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)
  • 网络安全之国际主流网络安全架构模型
  • js 获取token并保存30分钟,过期重新获取
  • 比特大陆/算能科技嵌入式面试题及参考答案
  • VMware(虚拟机)下的 Windows 10系统安装Vmwere Tools的详细教程
  • 软件开发的具体流程与管理规章制度规范,项目管理文件,开发过程文件(Word原件)
  • vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框
  • 高阶智驾「扔下」价格“炸弹”
  • 酒店叮咚门铃的类型有哪些
  • HTMLCSS 打造的酷炫菜单选项卡
  • 智能科技赋能金融决策:中阳科技的数据分析解决方案
  • 如何使用亿图脑图MindMaster大纲功能
  • 3175. 找到连续赢 K 场比赛的第一位玩家
  • C# 委托与匿名方法
  • 微知-tar命令如何只查看tgz文件内容不解压
  • 精品案例PPT | 企业架构及典型设计方案
  • 大数据应用开发——实时数据采集
  • Vue.js 组件开发详解
  • 斗破QT编程入门系列之四:GUI应用程序设计基础:UI文件设计原理与运行机制(五星斗师)
  • 腾讯云边缘安全加速平台EdgeOne最佳实践
  • 拾贝(Shibei):微信读书笔记管理的新篇章
  • 如何使用Flask编写一个网站