C# WPF上位机开发(网络程序界面开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        之前我们讨论过,设备之间通讯的方式很多。但是,不知道大家有没有注意,前面谈到的这些通讯方式都需要上位机电脑和被控制的设备离的很近,如果两者之间的距离比较短,这个时候就要想想其他的办法了。而网络,就是可以帮助我们解决这一问题的有效工具之一。

        和232相比较,网络最大的好处就是传输距离远,可以是有线、又可以无线。不仅如此,它还有内网和外网之分,如果是内网的设备,一般是处于保密和安全的需要;如果是外网,说明我们可以在很远的地方实现对设备、生产环境、作业系统的控制,这些都是很方便的。

        当然,要用好网络的话,需要我们能够掌握TCP/IP的基本协议,比如什么是链路层、什么是MAC地址、什么是IP、什么是端口、什么是网关等等。不光这些,除了这些基础内容,我们还有必要了解HTTP、FTP、Telnet、SSH、SMTP这些常用协议。有了这些基础做铺垫,后面加上一定的设备协议,就可以实现对远程设备的实时访问了。

        TCP/IP只是一个标准,它和编程语言、软件平台、关联设备没有什么关系,只要符合这个标准,就可以利用交换机、路由器实现数据的互通有无了。

1、应用者需要掌握的协议

        目前如果只是应用,学习好IP和PORT的配置就可以了,常用的协议HTTP、FTP、Telnet最好也掌握一下。

2、TCP和UDP如何选择

        TCP一般用在网络环境比较ok的场景,对于无线或者是网络比较糟糕的场景来说,最好使用UDP,通常来说问题也不大。

3、不想自己设计协议怎么处理

        如果通讯的设备都是自己开发的,那么完全可以使用xmlrpc的形式来进行通信。即所有通信的数据都压缩成xml形式传输,传输之后再调用对应的callback函数即可。

4、第三方设备的协议

        对于第三方设备,一般它们都会在官网或者github网上提供对应的sdk协议内容,我们只要拿到对应的代码,在作业平台上面编译、开发即可。这部分内容,最好自己不要开发。因为坦率来说,这部分工作应该由供应商来完成,此外就算帮供应商来完成了这部分内容的开发,对自己来讲,时间上面并不是一个划算的买卖。

5、开发方法

        目前不管是Windows,还是Linux,不管是c#、c、c++、vb、golang、java等语言,每一种平台、每一种语言都可以自己开发网络程序的,如果没有合适的第三方开发包,那么自己用Raw API直接开发网络程序也是可以的。就c# wpf而言,如果直接用Raw API开发网络程序,本身也是可以的。

6、网络界面开发

        为了验证网络开发的效果,大家可以自己编写一个界面、编写一些程序,验证是不是真的可以同网段通信、跨网段通信。此时可以先在自己的电脑上进行测试,用127.0.0.1来处理,没问题了之后,再去部署在不同的设备上去确认和验证,慢慢积累出自己的调试方法和开发经验。

        假设我们编写了这样一个服务器程序的界面,它bind到特定的ip、特定的端口上面,单击按钮后就可以开始监听端口。这个时候,每连接一个客户进来,右侧的combobox就添加一个选项。客户发送的内容,也会在第二行的Textbox打印出来,如果需要发送消息,那么第三行输入内容,单击“发送消息”按钮即可。当然,复杂一点,要发送文件的话,也可以通过选择文件和发送文件的按钮,来完成这样的操作。

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="ServerDemo" Height="350" Width="542"><Grid><Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="4*"/><RowDefinition Height="4*"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="1.5*"/><ColumnDefinition Width="*"/><ColumnDefinition Width="*"/><ColumnDefinition Width="*"/><ColumnDefinition Width="2*"/></Grid.ColumnDefinitions><TextBox Grid.Row="0" Grid.Column="0" BorderBrush="Black" Margin="5" Text="{Binding Ip}" HorizontalContentAlignment="Left"/><Border  Margin="5" Grid.Column="1" Grid.Row="0" CornerRadius="10" Background="CadetBlue"><TextBox BorderBrush="Black" Text="{Binding Port,Mode=TwoWay}" HorizontalContentAlignment="Left"/></Border><Border  Margin="5" Grid.Column="2" Grid.Row="0" CornerRadius="10" Background="CadetBlue"><Button BorderBrush="Black" Content="开始监听" Command="{Binding StartListen}"/></Border><Border  Margin="5" Grid.Column="3" Grid.Row="0" CornerRadius="10" Background="CadetBlue"><Button BorderBrush="Black" Content="停止监听" Command="{Binding StopListen}"/></Border><Border  Margin="5" Grid.Column="4" Grid.Row="0" CornerRadius="10"><StackPanel Orientation="Horizontal"><TextBlock Text="连接的客户:" VerticalAlignment="Center" TextAlignment="Center"/><ComboBox Width="80" ItemsSource="{Binding DicSocket,Mode=TwoWay}" SelectedValuePath="ItemSocket" DisplayMemberPath="ip" SelectedValue="{Binding SelectSocket,Mode=TwoWay}"  /></StackPanel></Border><TextBox Grid.Row="1" Grid.ColumnSpan="5" Background="LightSlateGray" BorderBrush="Black" Margin="5" Text="{Binding LogReceive}" VerticalScrollBarVisibility="Visible"/><TextBox Grid.Row="2" Grid.ColumnSpan="5" Background="LightSlateGray" BorderBrush="Black" Margin="5" Text="{Binding Sendtext}" VerticalScrollBarVisibility="Visible"/><Border  Margin="5" Grid.ColumnSpan="2" Grid.Row="3" CornerRadius="10" Background="CadetBlue"><TextBox BorderBrush="Black" Text="{Binding SelectFile,Mode=TwoWay}"/></Border><Border  Grid.Column="2" Grid.ColumnSpan="4" Grid.Row="3" CornerRadius="5" Background="White"><StackPanel Orientation="Horizontal" ><Grid Width="323"><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="*"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Button  Content="选择文件" Margin="5" Grid.Column="0" Command="{Binding SelectCommand}"/><Button  Content="发送文件" Margin="5" Grid.Column="1" Command="{Binding SendFileCommand}"/><Button  Content="发送消息" Margin="5" Grid.Column="2" Command="{Binding SendMessageCommand}"/></Grid></StackPanel></Border></Grid>
</Window>

7、剩余的工作

        仅仅有server端的程序,这个软件是没有办法顺利工作的。大家可以参考server端界面的写法,编写一个client端的界面和程序,这样就可以实现client-server的数据通信了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云创新动能涌现,浒墅关开启先进制造新纪元

编辑&#xff1a;阿冒 设计&#xff1a;沐由 穿境而过的京杭大运河&#xff0c;孕育了苏州浒墅关深厚的历史文化底蕴。千年延续不断的繁华&#xff0c;滋养了一代又一代奋进的浒墅关人。今天&#xff0c;一座国家级经开区挺立在这里&#xff0c;散发出创新创业的蓬勃活力。 苏州…

WordPress如何搭建多站点

这边之前有讲到过wordpress站中站&#xff08;栏目站&#xff09;建站教程&#xff0c;同样的也有讲到过WordPress开启多站点配置&#xff0c;两种方法都是用来搭建子站点的&#xff0c;而开启多站点的方式不同于普通搭建站中站&#xff0c;多站点配置开启&#xff0c;是可以实…

STM32F407-14.3.18-01连接霍尔传感器

连接霍尔传感器 可通过用于生成电机驱动 PWM 信号的高级控制定时器&#xff08;TIM1 或 TIM8&#xff09;以及图 114 中称为 “接口定时器”的另一个定时器 TIMx&#xff08;TIM2、TIM3、TIM4 或 TIM5&#xff09;&#xff0c;实现与霍尔传感器的连接。3 个定时器输入引脚&…

【C语言】实战项目——通讯录

引言 学会创建一个通讯录&#xff0c;对过往知识进行加深和巩固。 文章很长&#xff0c;要耐心学完哦&#xff01; ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 实战 建…

C语言——完数难题(编程题目)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命如同寓言&#xff0c;其价值不在于…

【数据分享】2019-2023年我国区县逐年二手房房价数据(Excel/Shp格式)

房价是一个区域发展程度的重要体现&#xff0c;一个区域的房价越高通常代表这个区域越发达&#xff0c;对于人口的吸引力越大&#xff01;因此&#xff0c;房价数据是我们在各项城市研究中都非常常用的数据&#xff01;之前我们分享了2019—2023年我国区县逐月的二手房房价数据…

破译模式:模式识别在计算机视觉中的作用

一、介绍 在当代数字领域&#xff0c;计算机视觉中的模式识别是关键的基石&#xff0c;推动着众多技术进步和应用。本文探讨了计算机视觉中模式识别的本质、方法、应用、挑战和未来趋势。通过使机器能够识别和解释视觉数据中的模式&#xff0c;模式识别不仅推动了计算机视觉领域…

小程序商城活动页面怎么生成二维码

背景 小程序商城某些页面需要做成活动推广页&#xff0c;或需要某一个页面做成二维码进行推广。比如某些非公开的商品做成一个活动&#xff0c;发送指定部分用户&#xff0c;这个活动页面可以做成二维码。 前提 小程序已经上线 步骤 登录微信小程序官网&#xff0c;选择工具…

【i.MX6ULL】使用buildroot构建根文件系统

文章目录 前言1、下载源码2、构建根文件系统1. 配置buildroot2. 编译buildroot3. buildroot根文件系统测试 3、buildroot第三方软件和库的配置1. 使能 alsa-lib2. 使能 alsa-utils 4、 buildroot下的busybox配置1. busybox配置2. 使能常用命令 前言 本篇文章时参考的正点原子的…

嵌入式开发中的总线与时钟

总线 AHB总线 AHB的全称是"Advanced High-performance Bus",中文翻译就是"高级高性能总线"。这是一种在计算机系统中用于连接不同硬件组件的总线架构,它可以帮助这些组件之间高效地传输数据和信息。这个总线架构通常用于处理速度较快且对性能要求较高的…

设计模式详解---单例模式

1. 设计模式详解 单例模式是一种创建对象的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点以获取该实例。 在单例模式中&#xff0c;类负责创建自己的唯一实例&#xff0c;并确保任何其他对象只能访问该实例。这对于需要共享状态或资源的情况非常有…

踩坑记录:java连接ssh的问题

目录 概述一、第一个问题解决 二、第二个问题分析解决 三、第三个问题分析解决 第四个问题解决 概述 手里有个CS架构的老系统&#xff0c;服务端要用SSH的方式传文件。没想到写了两天&#xff01;遇到一堆问题&#xff0c;于是记录下。&#xff08;老系统真恶心啊&#xff01;…

浮点数float类型不能用“==” 否知if语句不起作用

浮点数float类型不能用“” 否知if语句不起作用 简介演练 简介 在许多编程语言中&#xff0c;包括Python&#xff0c;浮点数类型&#xff08;float&#xff09;的比较是有问题的。浮点数是近似表示的&#xff0c;因此在比较两个浮点数是否相等时可能会遇到精度问题。 比如&am…

Linux(23):Linux 核心编译与管理

编译前的任务&#xff1a;认识核心与取得核心原始码 Linux 其实指的是核心。这个【核心(kernel)】是整个操作系统的最底层&#xff0c;他负责了整个硬件的驱动&#xff0c;以及提供各种系统所需的核心功能&#xff0c;包括防火墙机制、是否支持 LVM 或 Quota 等文件系统等等&a…

CMA、CNAS软件检测公司分享:压力测试应关注的指标和面临的问题

软件压力测试是容易被传统企业忽视的测试点&#xff0c;用户人数一旦超过预期&#xff0c;极易造成软件产品卡顿、崩溃的情况&#xff0c;不利于用户正常使用&#xff0c;严重影响企业公信力和盈利水平。今天卓码软件测评小编来聊聊压力测试过程中应该关注的指标和会面临的问题…

PLC、RS485、变频器通讯接线图详解

plc与变频器两者是一种包含与被包含的关系&#xff0c;PLC与变频器都可以完成一些特定的指令&#xff0c;用来控制电机马达&#xff0c;PLC是一种程序输入执行硬件&#xff0c;变频器则是其中之一。 但是PLC的涵盖范围又比变频器大&#xff0c;还可以用来控制更多的东西&#x…

【ProcessOn】流程图咏道图Axure自定义元件使用----含流程图案例

目录 一&#xff0c;ProcessOn 1.1 ProcessOn是什么 1.2 ProcessOn应用场景 1.3 流程图 1.4 泳道图简介 1.5 Process网址与界面简介 二&#xff0c;流程图案例 2.1 门诊流程图 2.2 住院流程图 2.3 药房药库流程图 2.4 会议OA流程图 三&#xff0c;Axure自定义元件 …

WEB渗透—PHP反序列化(三)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

嵌入式培训-数据结构-day23-线性表

线性表 线性表是包含若干数据元素的一个线性序列 记为&#xff1a; L(a0, ...... ai-1, ai, ai1 ...... an-1) L为表名&#xff0c;ai (0≤i≤n-1)为数据元素&#xff1b; n为表长,n>0 时&#xff0c;线性表L为非空表&#xff0c;否则为空表。 线性表L可用二元组形式描述…

diffuser为pipeline设置不用的scheduler

查看默认的schedulers&#xff1a; 使用默认的schedulers生成数据 查看默认scheduler的默认配置&#xff0c;定义了采样器中的相关参数&#xff0c;网上关于DDPM和DDIM的文章较多&#xff0c;可以先去看看这两种schedulers&#xff1a; 修改scheduler&#xff0c;可以用于…