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

2023-12-11 12:01

本文主要是介绍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的数据通信了。

这篇关于C# WPF上位机开发(网络程序界面开发)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480606

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M