这里写的是上位机基本的程序,有什么额外功能的话可以自己加上。我是参与别人项目里做的,主要实现了自动检测,断点重连,发送检测消息。因为要实时使用,所以要最大程度的避免程序崩溃,因此程序里使用了比较多的try模块。同是为了让别人使用起来方便,没有做其他修饰的东西。

Public Class Form1//用到的全局变量Public socketi As Net.Sockets.Socket'套接字Dim funct As StringDim funct1 As String = "Speed_LocPIDInit"Dim funct2 As String = "Angle_LocPIDInit"Dim Aip As String'该客户端ipDim Aport As String'该客户端portDim fg As Boolean = True'它的值表示连接是否正常Dim reg As Boolean = TrueDim Acc As Timers.Timer '接受服务器信息的定时器Dim Isone As Boolean = TrueDim Lock_syn As New Object()'线程锁Dim Send_Timer As Timers.Timer'定时发送消息的定时器Dim end_start As Boolean'///'按下左上角的X是调用该过程,关闭定时器,套接字等。Public Sub Ending()Trysocketi.Close()Catch ce As ExceptionEnd TryTryCh.Abort()Catch ex As ExceptionEnd TryTry'    Th.Abort()Acc.Stop()Catch ex As ExceptionEnd TryTrySend_Timer.Stop()Catch ex As ExceptionEnd Tryfg = TrueEnd Sub'
'定时发送所调用的过程Public Sub Time_Send()Dim str As String = "test" & Now().ToString()'当前的时间Dim encText As New System.Text.UTF8Encoding()Dim btText() As BytebtText = encText.GetBytes(str)Trysocketi.Send(btText)Catch ie As ExceptionEnd TryEnd Sub'/
'自动检测连接是否断开,如果断开,则一直尝试重连并且每次重连会显示出来Public Sub Ch_fun()Dim str As Int32 = 1Dim cf As Int32 = 1While 1Threading.Thread.Sleep(80)If fg = False Then' 10035 == WSAEWOULDBLOCKsocketi.Close()Button1.Enabled = TrueButton2.Enabled = FalseLabel11.Text = "连接断开,正在重连"Dim LocalEndPoint As New Net.IPEndPoint(Net.IPAddress.Parse(Aip), CInt(Aport))Dim client As Net.Sockets.Socket = Nothingclient = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)'尝试重连While 1TryLabel11.Text = "第" & str.ToString() & "次重连"str = str + 1client.Connect(LocalEndPoint)socketi = clientDim tmp(0) As Bytesocketi.Blocking = Falsesocketi.Send(tmp, 0, 0)Label11.Text = "连接正常"socketi.Blocking = TrueButton2.Enabled = Truestr = 1fg = TrueExit WhileCatch ex As ExceptionLabel11.Text = "连接断开,正在重连"Threading.Thread.Sleep(1000)Continue WhileEnd TryEnd WhileElseLabel11.Text = "连接正常"cf = cf + 1TextBox10.Text = cf.ToString()End IfEnd WhileEnd Sub''接收消息所用的过程Public Sub Task()If fg = False ThenExit SubEnd IfAcc.Enabled = False'接受消息可能会堵塞,设置该值是为了防止重复触发Dim str As New Text.StringBuilderDim str2 As String = NothingDim str3 As String = NothingDim by(100) As ByteDim ch(100) As CharDim ch1(100) As CharDim err As Int32Tryerr = socketi.Receive(by)Catch e As Exception'err<0说明连接出问题fg = FalseAcc.Enabled = TrueExit SubEnd TryIf err > 0 Thenstr.Append(System.Text.ASCIIEncoding.ASCII.GetString(by, 0, by.Length()))'Dim str1 As String = str.ToString()TextBox4.AppendText(vbNewLine & str1)TextBox4.ScrollToCaret()ElseIf err <= 0 Thenfg = FalseAcc.Enabled = TrueExit SubEnd IfAcc.Enabled = TrueEnd Sub
'//
'连接过程Public Sub connecting()Ending()'启动新连接前把上个连接关闭。fg = TrueDim flag As Int32 = 1Dim Ip As String = NothingDim Port As String = NothingIp = TextBox1.TextAip = IpWhile Ip Is ""MsgBox("请输入Ip地址", MsgBoxStyle.OkOnly, Me.Text)ReturnEnd WhilePort = TextBox2.TextAport = PortWhile Port Is ""MsgBox("请输入Port地址", MsgBoxStyle.OkOnly, Me.Text)ReturnEnd While'///链接代码Dim LocalEndPoint As New Net.IPEndPoint(Net.IPAddress.Parse(Ip), CInt(Port))Dim client As Net.Sockets.Socket = Nothingclient = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)' This is how you can determine whether a socket is still connected.Dim blockingState As Boolean = client.BlockingTryclient.Connect(LocalEndPoint)socketi = clientDim tmp(0) As Byteclient.Blocking = Trueclient.Send(tmp, 0, 0)MsgBox("Connected!")Catch ie As Exception' 10035 == WSAEWOULDBLOCKMsgBox("connet failed!, please check your Ip, Port", MsgBoxStyle.Exclamation)Button1.Enabled = TrueReturnFinallyclient.Blocking = blockingStateEnd Try'end_start = Falseclient.Blocking = True'MsgBox("Connected: {0}", client.Connected)If flag <> 1 ThenReturnEnd If'初始化Ch,AccCh = New Threading.Thread(AddressOf Ch_fun)Ch.Start()Acc = New Timers.Timer(80)Send_Timer = New Timers.Timer(FormatNumber(TextBox11.Text()))AddHandler Acc.Elapsed, AddressOf TaskAcc.Start()AddHandler Send_Timer.Elapsed, AddressOf Time_SendSend_Timer.Start()End Sub
'//
'开始时设置默认参数Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadTextBox1.Text = "127.0.0.1"TextBox2.Text = "8888"TextBox8.Text = "8"TextBox5.Text = "2"TextBox6.Text = "60"TextBox7.Text = "18"TextBox9.Text = "5"TextBox11.Text = "500"connecting()End Sub
'
'连接按钮触发事件Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickLabel11.Text = ""connecting()End Sub'///
'发送按钮Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickDim str As String = Nothingstr = TextBox3.TextIf str Is "" ThenMsgBox("请输入数据", MsgBoxStyle.Information)ReturnEnd If''下面注释的程序是为了获取服务器返回的参数,可以忽略。Dim fun(40) As Char'Dim can1(20) As Char'Dim can2(20) As Char'Dim can3(20) As Char'Dim i As Int32 = 0, j As Int32 = 0'Dim size As Int32 = str.Length'While i < size'    If str.Chars(i) = "("c Then'        Exit While'    End If'    fun(j) = str.Chars(i)'    j = j + 1'    i = i + 1'End While'i = i + 1'j = 0'While i < size'    If str.Chars(i) = ","c Then'        Exit While'    End If'    can1(j) = str.Chars(i)'    j = j + 1'    i = i + 1'End While'i = i + 1'j = 0'While i < size'    If str.Chars(i) = ","c Or str.Chars(i) = ")"c Then'        Exit While'    End If'    can2(j) = str.Chars(i)'    j = j + 1'    i = i + 1'End While'i = i + 1'j = 0'While i < size'    If str.Chars(i) = ","c Or str.Chars(i) = ")"c Then'        Exit While'    End If'    can3(j) = str.Chars(i)'    j = j + 1'    i = i + 1'End WhileIf socketi.Connected = False ThenReturnEnd IfDim str1 As String = TextBox4.TextIf str1 <> "" ThenTextBox4.AppendText(vbNewLine & str & vbNewLine)ElseTextBox4.AppendText(str & vbNewLine)End IfTextBox4.ScrollToCaret()End Sub
'///
'断开按钮Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.ClickTrysocketi.Close()Catch be As ExceptionEnd TryTryCh.Abort()Catch ex As ExceptionEnd TryTry'    Th.Abort()Acc.Stop()Catch ex As ExceptionEnd TryTry'    Send_Timer.Stop()Catch ex As ExceptionEnd TryMsgBox("连接断开")reg = TrueButton1.Enabled = TrueButton2.Enabled = TrueLabel11.Text = "状态"SyncLock Lock_synIsone = TrueEnd SyncLockEnd SubPrivate Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.ClickDim str1 As String = funct1Dim str2 As String = TextBox8.TextDim str3 As String = TextBox5.TextDim str4 As String = TextBox6.TextDim str5 As Stringstr5 = str1 & "(" & str2 & "," & str3 & "," & str4 & ")" & vbNewLineDim encText As New System.Text.UTF8Encoding()Dim btText() As BytebtText = encText.GetBytes(str5)socketi.Send(btText)Dim s As String = TextBox4.TextTextBox4.AppendText(vbNewLine & str5 & vbNewLine)TextBox4.ScrollToCaret()End SubPrivate Sub TextBox8_TextChanged(sender As Object, e As EventArgs) Handles TextBox8.TextChangedEnd SubPrivate Sub Label4_Click_1(sender As Object, e As EventArgs) Handles Label4.ClickEnd SubPrivate Sub TextBox6_TextChanged(sender As Object, e As EventArgs) Handles TextBox6.TextChangedEnd SubPrivate Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.ClickDim str1 As String = funct2Dim str2 As String = TextBox7.TextDim str3 As String = TextBox9.TextDim str5 As Stringstr5 = str1 & "(" & str2 & "," & str3 & ")" & vbNewLineDim encText As New System.Text.UTF8Encoding()Dim btText() As BytebtText = encText.GetBytes(str5)socketi.Send(btText)Dim s As String = TextBox4.TextTextBox4.AppendText(vbNewLine & str5 & vbNewLine)TextBox4.ScrollToCaret()End Sub'///
'界面关闭时触发Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosedEnding()End SubPrivate Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.ClickTrySend_Timer.Stop()Catch ie As ExceptionEnd TryEnd Sub

界面:

源代码地址:https://github.com/fengasdf/WindowsApplication2

用vb.net开发的简易(通用)上位机相关推荐

  1. 基于canoe开发的Bootloader刷写上位机,符合uds流程

    基于canoe开发的Bootloader刷写上位机,符合uds流程,可供项目应用和学习 另有支持周立功can卡的Bootloader上位机,符合uds规范的支持s32k144,英飞凌的Bootload ...

  2. swd脱机烧录器及上位机源码_通用上位机框架HwLib.Automation(C#)

    概述 现在的工业自动化领域,虽然组态软件因简单易用.价格合理而被广泛部署到各行各业的控制系统上.但对于一部分应用场景来说,自己开发上位机应用程序依然占有不小的市场,诸如: 1.标准化设备厂商,大量的软 ...

  3. Matlab上位机开发(一) —— 了解上位机

    1. 上位机的作用 在嵌入式项目开发中,无论是单片机项目.嵌入式Linux项目.FPGA项目,上位机始终是一个很重要的部分,主要用于: 数据显示(波形.温度等) 用户控制(LED,继电器等) 文件传输 ...

  4. 用python做一个上位机串口通信_【教程】简易Python上位机之LED控制

    电子爱好者应该不会对"上位机"这个词感到陌生,毕竟或多或少有过接触.但若是说到上位机的开发的话,大家就不一定熟悉了.很多电子爱好者完全没有接触过上位机的开发工作,他们真的没有相应的 ...

  5. python led屏控制_【教程】简易Python上位机之LED控制

    电子爱好者应该不会对"上位机"这个词感到陌生,毕竟或多或少有过接触.但若是说到上位机的开发的话,大家就不一定熟悉了.很多电子爱好者完全没有接触过上位机的开发工作,他们真的没有相应的 ...

  6. 正点原子Linux开发板——Qt串口上位机实验

    前言: 最近在学习嵌入式qt开发,然后跟着教程编写了一个简单的串口上位机程序,在编写的时候还算比较顺利,但在调试的时候花了点功夫,折腾了一下午.最后还是理清了思路,解决了问题,特写此博客进行记录和总结 ...

  7. 10-ESP8266 SDK开发基础入门篇--上位机通过串口控制ESP8266灯亮灭

    https://www.cnblogs.com/yangfengwu/p/11087618.html 其实这一节就是对上三节的综合测试 https://www.cnblogs.com/yangfeng ...

  8. 【北醒通用上位机】TF系列测试使用说明

    目录 硬件准备 2:连接设备 3:上位机连接以及读数 ps:使用环境及注意事项 常见问题 1 Dist可以看到距离值,但是曲线图界面无图形 ![在这里插入图片描述](https://img-blog. ...

  9. 基于python的智能小车_Python开发智能移动小车平台上位机

    智能移动小车平台上位机界面设计告一段落,特此记录一下整体的框架,以免之后再用的时候回忆不起来. 一.地图获取路径数据: 1.首先通过奥维地图绘制从起点到终点的多条路径,然后根据最优路径选择算法(此处选 ...

最新文章

  1. python【数据结构与算法】 python3 deque模块(双端队列)
  2. html overflow隐藏滚动条,css 之内容溢出滚动,隐藏滚动条
  3. httpclient 小例子编写
  4. 08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)
  5. SDL2.0文档翻译
  6. Ubuntu 配置环境变量
  7. C# WinForm开发系列 - Crystal Report
  8. 360云服务器合作,360云主机速度(云服务器)
  9. javascript三角函数的使用
  10. 爱自己,实现财务自由
  11. 如何使用Internet Download Manager批量下载音乐素材?
  12. 51单片机程序存储器扩展
  13. dns服务器不可用了怎么修复,dns服务器可能不可用怎么解决(dns服务器最有效的解决方法)...
  14. 3年风雨兼程-编程程软件测试终打破测试培训行业乱象
  15. arduino点阵声音频谱_Arduino实现32分频音频频谱显示器
  16. java 克隆有什么用_java中的克隆技术具体有什么应用?
  17. PS某色背景改为透明
  18. “在我心里,一直有一个户口本,上面有我们的名字”
  19. 《Python高手之路(第3版)》——1.5 Joshua Harlow访谈
  20. VS2008编译 找不到 regex头文件

热门文章

  1. P5459 [BJOI2016]回转寿司(动态开点)
  2. 神经网络学习(三)比较详细 卷积神经网络原理、手写字体识别(卷积网络实现)
  3. java中如何创建字符串数组
  4. 超级列表框导入到mysql_易语言excel表格怎样导入到超级列表框
  5. excel图片链接转批量图片再加上超链接(简陋版)
  6. 题解洛谷1179数字统计 记录问题
  7. [1179]hive的lateral view用法
  8. 向unity Asset Store提交资源-边做边记
  9. 如何在Unity实现从纹理中生成法线贴图?
  10. js节点操作自定义属性