这里写的是上位机基本的程序,有什么额外功能的话可以自己加上。我是参与别人项目里做的,主要实现了自动检测,断点重连,发送检测消息。因为要实时使用,所以要最大程度的避免程序崩溃,因此程序里使用了比较多的try模块。同是为了让别人使用起来方便,没有做其他修饰的东西。
Public Class Form1
//用到的全局变量
Public socketi As Net.Sockets.Socket'套接字
Dim funct As String
Dim funct1 As String = "Speed_LocPIDInit"
Dim funct2 As String = "Angle_LocPIDInit"
Dim Aip As String'该客户端ip
Dim Aport As String'该客户端port
Dim fg As Boolean = True'它的值表示连接是否正常
Dim reg As Boolean = True
Dim Acc As Timers.Timer '接受服务器信息的定时器
Dim Isone As Boolean = True
Dim Lock_syn As New Object()'线程锁
Dim Send_Timer As Timers.Timer'定时发送消息的定时器
Dim end_start As Boolean
'按下左上角的X是调用该过程,关闭定时器,套接字等。
Public Sub Ending()
socketi.Close()
Catch ce As Exception
End Try
Ch.Abort()
Catch ex As Exception
End Try
' Th.Abort()
Acc.Stop()
Catch ex As Exception
End Try
Send_Timer.Stop()
Catch ex As Exception
End Try
fg = True
End Sub
'定时发送所调用的过程
Public Sub Time_Send()
Dim str As String = "test" & Now().ToString()'当前的时间
Dim encText As New System.Text.UTF8Encoding()
Dim btText() As Byte
btText = encText.GetBytes(str)
socketi.Send(btText)
Catch ie As Exception
End Try
End Sub
'自动检测连接是否断开,如果断开,则一直尝试重连并且每次重连会显示出来
Public Sub Ch_fun()
Dim str As Int32 = 1
Dim cf As Int32 = 1
While 1
Threading.Thread.Sleep(80)
If fg = False Then
' 10035 == WSAEWOULDBLOCK
socketi.Close()
Button1.Enabled = True
Button2.Enabled = False
Label11.Text = "连接断开,正在重连"
Dim LocalEndPoint As New Net.IPEndPoint(Net.IPAddress.Parse(Aip), CInt(Aport))
Dim client As Net.Sockets.Socket = Nothing
client = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.Tcp)
'尝试重连
While 1
Label11.Text = "第" & str.ToString() & "次重连"
str = str + 1
client.Connect(LocalEndPoint)
socketi = client
Dim tmp(0) As Byte
socketi.Blocking = False
socketi.Send(tmp, 0, 0)
Label11.Text = "连接正常"
socketi.Blocking = True
Button2.Enabled = True
str = 1
fg = True
Exit While
Catch ex As Exception
Label11.Text = "连接断开,正在重连"
Threading.Thread.Sleep(1000)
Continue While
End Try
End While
Label11.Text = "连接正常"
cf = cf + 1
TextBox10.Text = cf.ToString()
End If
End While
End Sub
'接收消息所用的过程
Public Sub Task()
If fg = False Then
Exit Sub
End If
Acc.Enabled = False'接受消息可能会堵塞,设置该值是为了防止重复触发
Dim str As New Text.StringBuilder
Dim str2 As String = Nothing
Dim str3 As String = Nothing
Dim by(100) As Byte
Dim ch(100) As Char
Dim ch1(100) As Char
Dim err As Int32
err = socketi.Receive(by)
Catch e As Exception'err<0说明连接出问题
fg = False
Acc.Enabled = True
Exit Sub
End Try
If err > 0 Then
str.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 Then
fg = False
Acc.Enabled = True
Exit Sub
End If
Acc.Enabled = True
End Sub
'连接过程
Public Sub connecting()
Ending()'启动新连接前把上个连接关闭。
fg = True
Dim flag As Int32 = 1
Dim Ip As String = Nothing
Dim Port As String = Nothing
Ip = TextBox1.Text
Aip = Ip
While Ip Is ""
MsgBox("请输入Ip地址", MsgBoxStyle.OkOnly, Me.Text)
Return
End While
Port = TextBox2.Text
Aport = Port
While Port Is ""
MsgBox("请输入Port地址", MsgBoxStyle.OkOnly, Me.Text)
Return
End While
'///链接代码
Dim LocalEndPoint As New Net.IPEndPoint(Net.IPAddress.Parse(Ip), CInt(Port))
Dim client As Net.Sockets.Socket = Nothing
client = 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.Blocking
client.Connect(LocalEndPoint)
socketi = client
Dim tmp(0) As Byte
client.Blocking = True
client.Send(tmp, 0, 0)
MsgBox("Connected!")
Catch ie As Exception
' 10035 == WSAEWOULDBLOCK
MsgBox("connet failed!, please check your Ip, Port", MsgBoxStyle.Exclamation)
Button1.Enabled = True
Return
Finally
client.Blocking = blockingState
End Try
'end_start = False
client.Blocking = True
'MsgBox("Connected: {0}", client.Connected)
If flag <> 1 Then
Return
End If
'初始化Ch,Acc
Ch = 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 Task
Acc.Start()
AddHandler Send_Timer.Elapsed, AddressOf Time_Send
Send_Timer.Start()
End Sub
'开始时设置默认参数
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TextBox1.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.Click
Label11.Text = ""
connecting()
End Sub
'发送按钮
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim str As String = Nothing
str = TextBox3.Text
If str Is "" Then
MsgBox("请输入数据", MsgBoxStyle.Information)
Return
End 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 While
If socketi.Connected = False Then
Return
End If
Dim str1 As String = TextBox4.Text
If str1 <> "" Then
TextBox4.AppendText(vbNewLine & str & vbNewLine)
TextBox4.AppendText(str & vbNewLine)
End If
TextBox4.ScrollToCaret()
End Sub
'断开按钮
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
socketi.Close()
Catch be As Exception
End Try
Ch.Abort()
Catch ex As Exception
End Try
' Th.Abort()
Acc.Stop()
Catch ex As Exception
End Try
Send_Timer.Stop()
Catch ex As Exception
End Try
MsgBox("连接断开")
reg = True
Button1.Enabled = True
Button2.Enabled = True
Label11.Text = "状态"
SyncLock Lock_syn
Isone = True
End SyncLock
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Dim str1 As String = funct1
Dim str2 As String = TextBox8.Text
Dim str3 As String = TextBox5.Text
Dim str4 As String = TextBox6.Text
Dim str5 As String
str5 = str1 & "(" & str2 & "," & str3 & "," & str4 & ")" & vbNewLine
Dim encText As New System.Text.UTF8Encoding()
Dim btText() As Byte
btText = encText.GetBytes(str5)
socketi.Send(btText)
Dim s As String = TextBox4.Text
TextBox4.AppendText(vbNewLine & str5 & vbNewLine)
TextBox4.ScrollToCaret()
End Sub
Private Sub TextBox8_TextChanged(sender As Object, e As EventArgs) Handles TextBox8.TextChanged
End Sub
Private Sub Label4_Click_1(sender As Object, e As EventArgs) Handles Label4.Click
End Sub
Private Sub TextBox6_TextChanged(sender As Object, e As EventArgs) Handles TextBox6.TextChanged
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Dim str1 As String = funct2
Dim str2 As String = TextBox7.Text
Dim str3 As String = TextBox9.Text
Dim str5 As String
str5 = str1 & "(" & str2 & "," & str3 & ")" & vbNewLine
Dim encText As New System.Text.UTF8Encoding()
Dim btText() As Byte
btText = encText.GetBytes(str5)
socketi.Send(btText)
Dim s As String = TextBox4.Text
TextBox4.AppendText(vbNewLine & str5 & vbNewLine)
TextBox4.ScrollToCaret()
End Sub
'界面关闭时触发
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
Ending()
End Sub
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
Send_Timer.Stop()
Catch ie As Exception
End Try
End Sub
源代码地址:https://github.com/fengasdf/WindowsApplication2
这里写的是上位机基本的程序,有什么额外功能的话可以自己加上。我是参与别人项目里做的,主要实现了自动检测,断点重连,发送检测消息。因为要实时使用,所以要最大程度的避免程序崩溃,因此程序里使用了比较多的try模块。同是为了让别人使用起来方便,没有做其他修饰的东西。Public Class Form1//用到的全局变量 Public socketi As Net.Sockets.Socket'套
编写一个简单的vb.net上位机小弟只是嵌入式菜鸟一枚,第一次写blog,真不知道怎么下手,写得不好,求不黑,之前一直都在做底层单片机的程序,关于上位机编程其实刚涉足,我看了下网上这方面的免费案例材料好像并不多,有的只是很老vb6.0以前的资料,所以决定给论坛做点贡献,把我了解到的有价值的一些知识点都记录下来,同时和大家分享,共同进步。编程语言:vb.net
开发环境:visual studio
开始做了两年web、期间也整了一段时间winform。后来做了两年工控上位机,也就是做工控这两年发现机器跟面向对象真是如此贴切,也是我从处理数据和流程的思维转变为面向对象思维的开始。这对我后来学习mvc5、owin、.net core以及其它各种框架的学习有非常大的帮助,我发现我能看懂源码,也能理解这些大牛为什么要这么去设计c#教程
这些类,这些类是如何协同工作去实现一个复杂的可扩展的框架,因为这些框架、设计模式最最根本还是以面向对象的思维来处理具体场景的具体问题。这一瞬间有一百万种可能,转变思路
在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的:
USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互;
串口转WIFI(ESP8...
vb.net与c#是微软公司开发的两种面向对象的程序设计语言。
vb.net是Visual Basic的一种改进版本,它是一种易学易用的语言,适合初学者入门。它的语法结构简单清晰,代码书写风格更接近自然语言,因此比较容易理解和编写。vb.net提供了很多方便的功能和工具,可以快速开发Windows应用程序。与c#相比,vb.net对于处理COM组件和互操作性更为方便,适用于一些老式的系统和项目迁移。
c#是一门更加强大和灵活的语言,它的语法和C/C++类似,同时又结合了面向对象和组件开发的特点。c#拥有更多的功能和特性,比如匿名方法、泛型、LINQ等,可以编写更高效和复杂的程序。c#广泛应用于Web应用程序、手机应用程序和游戏开发等领域。与vb.net相比,c#更加注重性能和效率,适用于大型的项目开发。
虽然vb.net和c#语言上存在一些不同,但它们都是面向对象的语言,只是在语法和特性上略有差异。所以对于有基础的程序员来说,学习另一种语言并不困难,只需花一些时间来了解和适应其中的差异。
总的来说,vb.net适合初学者或者对简单程序需求的开发者,c#对于需要性能、复杂性和灵活性较高的项目更为适用。无论选择哪种语言,掌握基本的编程原理和逻辑思维都是非常重要的。
### 回答2:
VB.NET和C#是.NET平台上两种常见的编程语言,它们都是由微软公司开发的,并且都具备类似的语法和功能。
首先,VB.NET是Visual Basic的后续版本,在语法上保留了部分Visual Basic 6.0的特性。它的语法相对来说更加容易学习和理解,代码的可读性较高。VB.NET的开发速度较快,适合用于快速原型的开发和初学者学习编程。此外,VB.NET支持事件驱动编程,有丰富的图形用户界面(GUI)开发工具和库。虽然VB.NET在一些社区和开发者群体之间不如C#流行,但仍然在一些特定的应用场景中有着广泛的应用。
而C#是一种更加现代化和强大的编程语言,更加严格和规范。C#拥有更多的编程特性,比如面向对象编程和泛型等高级功能,开发者可以更加灵活地处理复杂的问题。C#的代码更加简洁、规范,可读性较高,它的运行效率也相对较高。C#在跨平台和服务器端开发领域有着广泛的应用,特别是在.NET Core的推动下,C#已经成为了一种非常受欢迎的编程语言。
总之,VB.NET和C#在语法和功能上存在一些差异,选择使用哪种语言主要取决于开发者的个人喜好、项目需求以及技术栈。无论选择VB.NET还是C#,都可以在.NET平台上进行完美的应用开发。
### 回答3:
VB.NET和C#都是微软公司为开发者提供的两种主要的编程语言。它们都属于.NET平台下的语言,并且都可以用于开发各种类型的应用程序,包括桌面应用、Web应用、移动应用等。
VB.NET(即Visual Basic .NET)是VB语言的升级版本,在.NET框架下具有更强大的功能和更高的性能。它是一种易学易用的编程语言,注重可读性和可维护性,适合初学者入门。VB.NET采用面向对象的编程思想,具有丰富的类库和快速开发工具,能够快速构建应用程序。VB.NET在Windows平台下得到了广泛应用,并且具有优秀的可视化编程能力,可以通过拖拽控件的方式进行UI设计。
C#(即C Sharp)是一种现代化的面向对象编程语言,由微软开发。C#语言的语法与C和C++较为相似,易于掌握。它具有高效的执行速度和强大的功能,支持LINQ查询、异步编程等特性。C#适用于跨平台开发,并且具有良好的可扩展性和可移植性。C#在.NET平台下得到了广泛应用,尤其适合开发Web应用和桌面应用,其对于.NET平台的集成开发环境(IDE)Visual Studio也非常强大。
总结来说,VB.NET和C#是两种功能强大的编程语言,它们在语法、语义等方面虽有一定的差异,但都可以用于.NET平台下的应用程序开发。选择VB.NET还是C#主要取决于个人偏好、项目需求以及和其他开发人员的协作等因素。无论选择哪种语言,都可以通过学习它们的特性和使用场景,为开发高质量的应用程序提供支持。