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

dotNet 之网络TCP

 **硬件支持型号  点击 查看 硬件支持 详情**

DTU701 产品详情

DTU702 产品详情

DTU801 产品详情

DTU802 产品详情

DTU902 产品详情

G5501 产品详情

ARM dotnet 编程

dotNet使用TCP,可以使用Socket和TcpClient 、TcpListener类 2种,对于高级用户,建议使用Socket类,可以获得更大控制和性能。TcpClientTcpListener 内部都依赖于 Socket 类。

这里使用TcpClient 和 TcpListener,编写一个客户端和服务端程序,客户端发送数据服务端接收并显示,服务端发送数据,每一个客户都接收到数据并显示:

Socket编程可能会需要用到IPEndPoint、Dns、IPAddress等类,再往上TCP相关有TcpListener、TcpClient、NetworkStream,再往上就是大家熟悉的HttpClient等。

服务端代码如下:

using System.Net;
using System.Net.Sockets;
using System.Text;
​
namespace hwapp
{class Program{/// 创建 TcpListener/// TcpListener 类型用于监视 TCP 端口上的传入请求,然后创建一个 Socket 或 TcpClient 来管理与客户端的连接。 static TcpListener tcpListener;static List<NetworkStream> networkStreams = new List<NetworkStream>();static void Main(string[] args) {///开启监听tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9999);///Start 方法可使用侦听,而 Stop 方法禁用端口上的侦听。tcpListener.Start(10); // 最多 同时 接收10个用户连接Console.WriteLine("启动服务(IP:127.0.0.1 端口:9999),等待客户端连接!");///开启一个线程,循环等待客户端的连接Task.Run(() => { Accept(); });
​while(true){/// 使用 NetworkStream 将数据写入连接的客户端var msg = Console.ReadLine();foreach (var item in networkStreams){item.Write(Encoding.UTF8.GetBytes(msg));}}}
​static void Accept(){while (true){///【阻塞】等待客户端的连接/// AcceptTcpClientAsync 方法接受传入的连接请求并创建 TcpClient 来处理请求TcpClient tcpClient = tcpListener.AcceptTcpClient();NetworkStream networkStream = tcpClient.GetStream();Console.WriteLine($"{tcpClient.Client.RemoteEndPoint}上线");networkStreams.Add(networkStream);///开启一个新的线程 等待新的消息Task.Run(() => { Read(networkStream, tcpClient); });}}
​/// <summary>/// 接收消息/// </summary>/// <param name="networkStream"></param>static void Read(NetworkStream networkStream, TcpClient tcpClient){while (true){try{byte[] buffer = new byte[1024 * 1024];/// 【阻塞】等待接收新的消息var readLen = networkStream.Read(buffer, 0, buffer.Length);if (readLen == 0){Console.WriteLine($"{tcpClient.Client.RemoteEndPoint}下线");networkStreams.Remove(networkStream);networkStream.Close();tcpClient.Close();return;}Console.WriteLine(tcpClient.Client.RemoteEndPoint + ":" + Encoding.UTF8.GetString(buffer, 0, readLen));}catch (Exception) { }}}}
}
​

客户端代码如下:

namespace IOTtcpClient
{class Program{/// 创建客户端套接字static TcpClient tcpClient;static NetworkStream networkStream;static void Main(string[] args){Console.WriteLine("TCP tcp Client");
​var ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);
​tcpClient = new TcpClient();try{/// 连接到服务器tcpClient.Connect(ipEndPoint);Console.WriteLine("连接成功");/// 创建 NetworkStream 以发送和接收数据/// 需要使用 GetStream() 方法实例化 NetworkStream,以便能够发送和接收数据networkStream = tcpClient.GetStream();
​//读取Task.Run(() => { Read(); });
​Console.WriteLine("=======");while (true){Console.Write("->");var msg = Console.ReadLine();/// 发送消息到服务端networkStream.Write(Encoding.UTF8.GetBytes(msg));}}catch (Exception) {Console.WriteLine("连接失败");}}
​/// <summary>/// 接收数据/// </summary>static void Read(){while (networkStream.CanRead){try{byte[] buffer = new byte[1024 * 1024];///【阻塞】等待接收新的消息var readLen = networkStream.Read(buffer, 0, buffer.Length);if (readLen == 0)   ///客户端断开连接{Console.WriteLine("强行断开连接");networkStream.Close();return;}Console.WriteLine("<-" + Encoding.UTF8.GetString(buffer, 0, readLen));}catch (Exception) { }}}}
}

更多信息 请查看 dotNet基础知识.pdf

DTU系列 说明

 **硬件支持型号  点击 查看 硬件支持 详情**

DTU701 产品详情

DTU702 产品详情

DTU801 产品详情

DTU802 产品详情

DTU902 产品详情

G5501 产品详情

ARM dotnet 编程

http://www.lryc.cn/news/114644.html

相关文章:

  • python基础面试题汇总(持续更新),冲击offer
  • Java课题笔记~ AOP编程术语(掌握)
  • 暑假刷题第23天--8/6
  • ArcGIS API for JavaScript 4.x 教程(一) 显示一张地图
  • Python-OpenCV中的图像处理
  • 分清性能测试,负载测试,压力测试这三个的区别
  • 前端架构师岗位的工作职责(合集)
  • 使用 Amazon ECS Anywhere 在边缘部署 Amazon IoT Greengrass
  • pytorch Stream 多流处理
  • 微信小程序选项卡切换(滑动切换,点击切换)
  • 安路FPGA的赋值报错——移位处理,加括号
  • GO学习之 接口(Interface)
  • ansible常见模块的运用
  • 合宙Air724UG LuatOS-Air script lib API--patch
  • pytorch求导
  • Java基础异常详解
  • vue3+vue-i18n 监听语言的切换
  • 【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示
  • 娇滴滴的一朵花(Python实现)
  • Android AccessibilityService研究
  • 华为OD机试(含B卷)真题2023 算法分类版,58道20个算法分类,如果距离机考时间不多了,就看这个吧,稳稳的
  • JMeter命令行执行+生成HTML报告
  • 学习Boost二:从附录3来看编码习惯
  • STM32基础入门学习笔记:核心板 电路原理与驱动编程
  • 最后一次模拟考试题解
  • Mac 创建和删除 Automator 工作流程,设置 Terminal 快捷键
  • 2023华为OD机试真题B卷 Java 实现【最长的元音串】
  • 网络防御之传输安全
  • 【css】组合器
  • HTTPS、TLS加密传输