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

白骑士的C#教学高级篇 3.3 网络编程

        网络编程是现代应用程序开发中至关重要的一部分。C# 提供了一套丰富的 API 来处理基本网络通信、Web请求与响应。在本节中,我们将深入探讨这些内容,帮助您掌握如何在 C# 中进行网络编程。

基本网络通信

        基本网络通信通常涉及套接字(Socket)编程。C# 提供了 ‘System.Net.Sockets‘ 命名空间来处理套接字编程,使得开发者可以创建客户端和服务器应用程序。

        以下是使用 TCP 套接字创建一个简单的客户端-服务器应用程序的方法示例:

服务器端

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;public class Server
{public static void Main(){TcpListener server = null;try{int port = 13000;IPAddress localAddr = IPAddress.Parse("127.0.0.1");server = new TcpListener(localAddr, port);server.Start();byte[] bytes = new byte[256];string data = null;while (true){Console.Write("Waiting for a connection... ");TcpClient client = server.AcceptTcpClient();Console.WriteLine("Connected!");data = null;NetworkStream stream = client.GetStream();int i;while ((i = stream.Read(bytes, 0, bytes.Length)) != 0){data = Encoding.ASCII.GetString(bytes, 0, i);Console.WriteLine($"Received: {data}");data = data.ToUpper();byte[] msg = Encoding.ASCII.GetBytes(data);stream.Write(msg, 0, msg.Length);Console.WriteLine($"Sent: {data}");}client.Close();}}catch (SocketException e){Console.WriteLine($"SocketException: {e}");}finally{server.Stop();}Console.WriteLine("\nHit enter to continue...");Console.Read();}
}

客户端

using System;
using System.Net.Sockets;
using System.Text;public class Client
{public static void Main(){try{Int32 port = 13000;TcpClient client = new TcpClient("127.0.0.1", port);NetworkStream stream = client.GetStream();string message = "Hello, Server!";byte[] data = Encoding.ASCII.GetBytes(message);stream.Write(data, 0, data.Length);Console.WriteLine($"Sent: {message}");data = new byte[256];string responseData = string.Empty;Int32 bytes = stream.Read(data, 0, data.Length);responseData = Encoding.ASCII.GetString(data, 0, bytes);Console.WriteLine($"Received: {responseData}");stream.Close();client.Close();}catch (ArgumentNullException e){Console.WriteLine($"ArgumentNullException: {e}");}catch (SocketException e){Console.WriteLine($"SocketException: {e}");}Console.WriteLine("\nHit enter to continue...");Console.Read();}
}

        在这个示例中,服务器端使用 ‘TcpListener‘ 类监听连接请求,客户端使用 ‘TcpClient‘ 类连接到服务器并发送数据。

Web请求与响应

        Web请求与响应是网络编程中的常见操作。C# 提供了 ‘System.Net.Http‘ 命名空间,用于处理 HTTP 请求和响应。

发送 GET 请求

using System;
using System.Net.Http;
using System.Threading.Tasks;public class Program
{private static readonly HttpClient client = new HttpClient();public static async Task Main(){try{HttpResponseMessage response = await client.GetAsync("https://api.github.com/repos/dotnet/docs/issues");response.EnsureSuccessStatusCode();string responseBody = await response.Content.ReadAsStringAsync();Console.WriteLine(responseBody);}catch (HttpRequestException e){Console.WriteLine($"Request exception: {e.Message}");}}
}

        在这个示例中,使用 ‘HttpClient‘ 类发送 GET 请求,并读取响应内容。

发送 POST 请求

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;public class Program
{private static readonly HttpClient client = new HttpClient();public static async Task Main(){var values = new Dictionary<string, string>{{ "username", "example" },{ "password", "password" }};var content = new FormUrlEncodedContent(values);try{HttpResponseMessage response = await client.PostAsync("https://example.com/api/login", content);response.EnsureSuccessStatusCode();string responseBody = await response.Content.ReadAsStringAsync();Console.WriteLine(responseBody);}catch (HttpRequestException e){Console.WriteLine($"Request exception: {e.Message}");}}
}

        在这个示例中,使用 ‘HttpClient‘ 类发送 POST 请求,并读取响应内容。

总结

        在本节中,我们探讨了 C# 中进行网络编程的多种方法,包括基本网络通信和 Web 请求与响应。通过掌握这些技术,您可以开发网络应用程序,实现客户端和服务器之间的通信,处理 HTTP 请求和响应,提升应用程序的功能和性能。继续学习 C# 的高级特性,将使您成为更为高效和熟练的开发者。

相关文章:

白骑士的C#教学高级篇 3.3 网络编程

网络编程是现代应用程序开发中至关重要的一部分。C# 提供了一套丰富的 API 来处理基本网络通信、Web请求与响应。在本节中&#xff0c;我们将深入探讨这些内容&#xff0c;帮助您掌握如何在 C# 中进行网络编程。 基本网络通信 基本网络通信通常涉及套接字&#xff08;Socket&a…...

AI大模型赋能游戏:更智能、更个性化的NPC

参考论文&#xff1a;https://arxiv.org/abs/2403.10249 在传统游戏中&#xff0c;NPC&#xff08;非玩家角色&#xff09;的行为往往是预先设定好的&#xff0c;缺乏灵活性和变化性。然而&#xff0c;基于大模型的NPC可以利用其强大的推理和学习能力&#xff0c;实时生成对话…...

pymysql的上下文管理器:简化数据库操作

pymysql的上下文管理器&#xff1a;简化数据库操作 当我们使用 pymysql 操作数据库时&#xff0c;管理数据库连接和游标的生命周期是一项重要的任务。Python 的上下文管理器提供了一种优雅的方式来处理资源的获取和释放。在本文中&#xff0c;我们将探索如何创建一个简单的 py…...

AI秘境-墨小黑奇遇记 - 修炼成神经(二)

在解开了感知机和门电路的谜题后&#xff0c;墨小黑对人工智能的世界渐渐产生了浓厚的兴趣。他开始意识到&#xff0c;自己不仅是在学习一门复杂的技术&#xff0c;更是在探索一个充满未知与挑战的神秘领域。 入夜&#xff0c;墨小黑一脸无奈地盯着电脑屏幕&#xff0c;思考着自…...

计算机网络之分组交换时延的计算

一.类型 分组交换的时延包括一下几种&#xff1a; 1.1发送时延 发送时延&#xff0c;也叫传输时延&#xff0c;结点将分组的所有比特推向链路所需要的时间&#xff0c;即从发送分组的第一个比特算起&#xff0c;到该分组的最后一个比特发送完为止。 发送时延 分组长度 / 发…...

虚幻5|入门AI行为树,建立敌人

本章分成两块部分一块是第一点的制作一个简单的AI&#xff0c;后面第二点之后是第二部分建立ai行为树。这两个部分是一个衔接&#xff0c;最好不要跳看 一&#xff0c;制作一个简单的AI 1.首先&#xff0c;我们创建一个敌人的角色蓝图&#xff0c;添加一个场景组件widget用于…...

ARM处理架构中的PMU(Performance Monitoring Unit)和 AMU(Activity Monitors Unit)简介

在 ARM 架构中,PMU(Performance Monitoring Unit)和 AMU(Activity Monitors Unit)是用于性能分析和监控的硬件单元,但它们的功能和应用场景有所不同。以下是它们的主要区别: 1. PMU (Performance Monitoring Unit) 功能:PMU 是一种用于监控处理器性能的硬件单元。它可…...

Service服务在Android中的使用

目录 一&#xff0c;Service简介 二&#xff0c;Service的两种启动方式 1&#xff0c;非绑定式启动Service 2&#xff0c;绑定式启动Service 三&#xff0c;Service的生命周期 1&#xff0c;非绑定式Service的生命周期 2&#xff0c;绑定式Service的生命周期 四&#xf…...

浅谈C语言位段

1、位段的定义 百度百科中是这样解释位段的: 位段&#xff0c;C语言允许在一个结构体中以位为单位来指定其成员所占内存长度&#xff0c;这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据。 以下&#xff0c;我们均在VS2022的…...

arcgisserver登陆信息不正确

密码明明对&#xff0c;但是登录提示登录信息不正确 Arcgis server 9.3.1 无法登录ArcGIS Manager 提示Incorrect Login Information 操作系统windows 2008 x64server 解决办法&#xff1a; 关闭window防火墙解决。 如果防火墙已经关闭&#xff1a; 通过修改用户口令后就可以重…...

KOLA: CAREFULLY BENCHMARKING WORLD KNOWLEDGE OF LARGE LANGUAGE MODELS

文章目录 题目摘要简介KOLA 基准实验评估结论和未来工作道德声明 题目 KOLA&#xff1a;仔细对大型语言模型的世界知识进行基准测试 论文地址:https://arxiv.org/abs/2306.09296 项目地址:https://github.com/ranahaani/GNews 摘要 大型语言模型 (LLM) 的卓越性能要求评估方法…...

Robot Operating System——机器人关节的角度、速度和力矩

大纲 应用场景定义字段解释 案例 sensor_msgs::msg::JointState 是 ROS (Robot Operating System) 中的一个消息类型&#xff0c;用于表示机器人关节的状态信息。它通常用于传输和处理机器人关节的角度、速度和力矩等信息。 应用场景 机器人控制 关节控制&#xff1a;在机器人…...

一分钟掌握java9新特性

try-with-resources语句 /** * 在处理必须关闭的资源时&#xff0c;使用try-with-resources语句替代try-finally语句。 生成的代码更简洁&#xff0c;更清晰&#xff0c;并且生成的异常更有用 * java9 之前写法 */ public static String readFile1(String fileName){ tr…...

89. UE5 RPG 实现伤害 冷却 消耗技能描述

在上一篇文章里&#xff0c;我们能够通过富文本显示多种格式的文字&#xff0c;并显示技能描述。在这一篇文章里&#xff0c;我们继续优化技能描述&#xff0c;将技能说需要显示的内容显示出来。 实现火球术的基础描述 首先&#xff0c;我们现实现火球术的基础描述&#xff0…...

el-tree树状控件,定位到选中的节点的位置

效果图 在el-tree 控件加 :render-content"renderContent" 在掉接口的方法中 实际有用的是setTimeout 方法和this.$refs.xxxxxx.setCheckedKeys([industrycodeList]) if(res.data.swindustrylist.length>0){res.data.swindustrylist.forEach(item > {industry…...

YOLO目标检测的单目(多目标测距),使用相机光学模型,支持目标检测模型训练,可输出目标位置和距离信息并可视化

本项目旨在开发一个基于YOLO的目标检测系统&#xff0c;该系统不仅能检测图像中的多个目标&#xff0c;还能利用单目摄像头的图像估计每个目标与摄像头之间的相对距离。系统的核心组成部分包括目标检测、距离估计、模型训练以及结果可视化。 主要功能 目标检测&#xff1a;使用…...

unity简易lua文件迁移工具

一. 了解商业游戏的Lua热更新开发方式 市面上的3种结合Lua热更新的开发方式 1.纯Lua开发&#xff08;所有的游戏主要逻辑都用Lua实现&#xff09; 好处&#xff1a;机动性强&#xff1b;坏处&#xff1a;代码效率略差 2.半C#&#xff0c;半Lua开发&#xff08;核心逻辑C#开发…...

Elasticsearch中的自动补全功能详解与实践

简介 自动补全是现代搜索引擎中的一项重要功能&#xff0c;它能够根据用户的输入提供实时的建议&#xff0c;提高用户体验。Elasticsearch提供了Completion Suggester查询来实现这一功能。本文将详细介绍Elasticsearch中的自动补全功能&#xff0c;并提供详细的配置和查询示例…...

前端如何使用Nginx代理dist网页,代理websocket,代理后端

本文将指导您如何配置Nginx以代理前后端分离的项目&#xff0c;并特别说明了对WebSocket的代理设置。通过本教程&#xff0c;您将能够实现一次性配置&#xff0c;进而使项目能够在任意局域网服务器上部署&#xff0c;并可通过IP地址或域名访问服务。 笔者建议 先速览本文了解大…...

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. 问题解决

问题描述 原来我的服务器docker服务运行正常&#xff0c;但在某次尝试用时, 根据系统的错误提示执行了snap install docker指令之后&#xff0c; 再执行docker ps命令则提示Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...