示例中使用的设备:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.2.2b826baaneOluT&id=17021194999https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.2.2b826baaneOluT&id=17021194999

Imports System.Net.Sockets
Imports System.Net
Imports System.Text
Imports System.Threading
Public Class Form1
    Dim PortNumber As Integer = 39192 ''侦听端口号
    Dim ListenerSock As Socket ''侦听socket
    Dim ListenerThre As Thread ''侦听线程
    Dim LocalIp As String      ''本地ip64
    Dim ready As Boolean = False ''线程运行标识
    Dim machinnos As String

    Delegate Sub Gxdjs(ByVal data As String)  '线程内更新UI传送一个显示参数
    Delegate Sub EditUi(ByVal data0 As String, ByVal data1 As String)  '线程内更新UI传送两个参数

    Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
        ListenerSock.Close()
        ready = False
        ListenerThre.Abort()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        getIp()
        StartListener() ''开始侦听
    End Sub

    Private Sub StartListener()
        Dim LocalPoint As IPEndPoint
        While Not ready ''向用户询问侦听端口号。用户可以直接回车,表示选择默认的。
            Try
                LocalPoint = New IPEndPoint(IPAddress.Parse(LocalIp), PortNumber)
                ListenerSock = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
                ListenerSock.Bind(LocalPoint)

                ListenerThre = New Thread(AddressOf ThrListener)
                ListenerThre.Start()
                ready = True

            Catch ex As Exception
                ListenerSock.Close()
                ready = False
                ListBox1.Items.Add("ERROR:" & vbCrLf & ex.Message & vbCrLf)
            End Try
        End While
    End Sub

    Public Sub getIp()     '获取本机所有网卡的IP
        Dim Address() As System.Net.IPAddress
        Dim i As Integer
        Address = Dns.GetHostByName(Dns.GetHostName()).AddressList
        If UBound(Address) < 0 Then
            MsgBox("未能查找到本台电脑安装的网卡,暂不能启动本软件。", MsgBoxStyle.Critical + vbOKOnly, "注意")
            End
        Else
            For i = 0 To UBound(Address)
                ComboBox1.Items.Add(Address(i).ToString())
            Next
            ComboBox1.SelectedIndex = 0
            LocalIp = ComboBox1.Text.Trim()
        End If
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        Try
            ListenerSock.Close()
            ready = False
            ListenerThre.Abort()
            LocalIp = ComboBox1.Text.Trim()
            StartListener()   '开始侦听已选网卡的UDP端口
        Catch

        End Try
    End Sub
    Private Sub ThrListener() ''侦听线程      
        While ready
            Try
                Dim bytes(1024) As Byte
                Dim dataArray() As String
                Dim RemotePoint As System.Net.EndPoint = New System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
                Dim NumGet As Integer
                Dim Msg As String
                Dim Sendinf As String
                Dim SendBuf As Byte()

                Dim DevBufferIpAddrStr As String
                Dim DevBufferRemoteAddrStr As String
                Dim DevBufferUseTimeStr As String
                Dim DevRecFramesStr As String
                Dim DevBufferMachinStr As String
                Dim DevBufferCardidStr As String
                Dim DevBufferUseMoneryStr As String
                Dim DevBufferSerialNumStr As String

                Dim ipep As IPEndPoint

                NumGet = ListenerSock.ReceiveFrom(bytes, RemotePoint)
                Msg = Encoding.UTF8.GetString(bytes, 0, NumGet)                
                Me.Invoke(New editUi(AddressOf EditUiNow), Now() & (" FromIP:" & Convert.ToString(RemotePoint) + "          ").Substring(0, 30) & "Data:", Msg) '用Invoke跨线程更新UI      

                dataArray = Split(Convert.ToString(Msg), ",")
                Select Case dataArray(0)
                    Case "101"             '接收到 1、终端开机时向电脑发送的开机信息,         2、电脑发送002查询设备时间所返回的信息

                    Case "102"                                    '刷卡后设备向电脑发送此信息
                        DevRecFramesStr = dataArray(1)            '包序列号
                        DevBufferIpAddrStr = dataArray(2)         '终端IP
                        DevBufferRemoteAddrStr = dataArray(3)     '远程电脑指机IP
                        DevBufferMachinStr = dataArray(4)         '机号
                        DevBufferCardidStr = dataArray(5)         '十位物理卡号
                        If dataArray.Length > 6 Then
                            DevBufferSerialNumStr = dataArray(6)  '2018年以后的设备有唯一硬件序号
                        End If

                        Sendinf = "001," + DevRecFramesStr        '向设备发此数据表示已收到信息,否则设备会连续发三次
                        SendBuf = Encoding.GetEncoding(936).GetBytes(Sendinf)
                        ListenerSock.SendTo(SendBuf, SendBuf.Length, SocketFlags.None, RemotePoint)
                        Me.Invoke(New Gxdjs(AddressOf Cdjs), Now() & (" SendTo:" & Convert.ToString(RemotePoint) + "          ").Substring(0, 30) & "Data:" & Sendinf)

                        '此处加入业务对数据库的查、增、删、减操作

                        Sendinf = "009," & DevBufferMachinStr & ",{卡号:}" & DevBufferCardidStr & "\\n姓名:张三丰\\n余额:1688.88\\n职务:武当掌门\\n,20,1,8"
                        SendBuf = Encoding.GetEncoding(936).GetBytes(Sendinf)
                        ListenerSock.SendTo(SendBuf, SendBuf.Length, SocketFlags.None, RemotePoint)
                        Me.Invoke(New Gxdjs(AddressOf Cdjs), Now() & (" SendTo:" & Convert.ToString(RemotePoint) + "          ").Substring(0, 30) & "Data:" & Sendinf)

                    Case "103"                                     '按消费金额后刷卡 向电脑发送此信息
                        DevRecFramesStr = dataArray(1)             '包序列号
                        DevBufferIpAddrStr = dataArray(2)          '终端IP
                        DevBufferRemoteAddrStr = dataArray(3)      '远程电脑指机IP
                        DevBufferMachinStr = dataArray(4)          '机号
                        DevBufferCardidStr = dataArray(5)          '卡号
                        DevBufferUseMoneryStr = dataArray(6)       '消费额
                        DevBufferUseTimeStr = dataArray(7)         '消费时间
                        If dataArray.Length > 8 Then
                            DevBufferSerialNumStr = dataArray(8)  '2018年以后的设备有唯一硬件序号
                        End If

                        Sendinf = "001," + DevRecFramesStr        '向设备发此数据表示已收到信息,否则设备会连续发三次
                        SendBuf = Encoding.GetEncoding(936).GetBytes(Sendinf)
                        ListenerSock.SendTo(SendBuf, SendBuf.Length, SocketFlags.None, RemotePoint)
                        Me.Invoke(New Gxdjs(AddressOf Cdjs), Now() & (" SendTo:" & Convert.ToString(RemotePoint) + "          ").Substring(0, 30) & "Data:" & Sendinf)

                        '此处加入业务对数据库的查、增、删、减操作

                        '008指令返回本次消费成功,006指令返回本次消费失败,正式系统开发时要有重发机制*
                        Sendinf = "008," & DevBufferMachinStr & "," & DevBufferCardidStr & "," & DevBufferUseMoneryStr & ",姓名:张三丰{ 168.98\\n},20,1,1"
                        SendBuf = Encoding.GetEncoding(936).GetBytes(Sendinf)
                        ListenerSock.SendTo(SendBuf, SendBuf.Length, SocketFlags.None, RemotePoint)
                        Me.Invoke(New Gxdjs(AddressOf Cdjs), Now() & (" SendTo:" & Convert.ToString(RemotePoint) + "          ").Substring(0, 30) & "Data:" & Sendinf)
                End Select

            Catch ex As Exception
                Me.Invoke(New Gxdjs(AddressOf Cdjs), "ERROR:" & vbCrLf & ex.Message & vbCrLf)
            End Try
        End While
    End Sub

    Private Sub Cdjs(ByVal data As String) '这里要和委托定义时的参数保持一致
        ListBox1.Items.Add(data)
        ListBox1.SelectedIndex = ListBox1.Items.Count - 1
    End Sub

    Private Sub EditUiNow(ByVal data0 As String, ByVal data1 As String) '这里要和委托定义时的参数保持一致
        ListBox1.Items.Add(data0 & data1)
        ListBox1.SelectedIndex = ListBox1.Items.Count - 1

        Dim dataArray() As String
        Dim DevBufferIpAddrStr As String
        Dim DevBufferMaskStr As String
        Dim DevBufferGatewayStr As String
        Dim DevBufferRemoteAddrStr As String
        Dim DevBufferPort As String
        Dim DevBufferNumberDecStr As String
        Dim DevBufferGatewayStrMAC As String
        Dim DevBufferRemoteAddrMACStr As String
        Dim DevBufferMACSearchStr As String
        Dim DevBufferSerialNumStr As String
        Dim plist As ListViewItem
        Dim i As Integer
        Dim poi As Integer
        Dim macstr As String

        dataArray = Split(data1, ",")
        If dataArray(0) = "100" Then       '发送搜索指令后,在线设备的返回信息
            If UBound(dataArray) = 6 Then  '旧设备不能跨网段通讯的设备返回信息
                For i = 1 To UBound(dataArray) / 6
                    DevBufferIpAddrStr = dataArray((i - 1) * 6 + 1)
                    DevBufferMaskStr = dataArray((i - 1) * 6 + 2)
                    DevBufferGatewayStr = dataArray((i - 1) * 6 + 3)
                    DevBufferRemoteAddrStr = dataArray((i - 1) * 6 + 4)
                    DevBufferPort = dataArray((i - 1) * 6 + 5)
                    DevBufferNumberDecStr = dataArray((i - 1) * 6 + 6)

                    poi = InStr(1, machinnos, DevBufferNumberDecStr)
                    If poi = 0 Then
                        macstr = DevBufferNumberDecStr
                        machinnos = machinnos + DevBufferNumberDecStr
                        plist = ListView1.Items.Add(DevBufferIpAddrStr)
                        plist.SubItems.Add(DevBufferMaskStr)
                        plist.SubItems.Add(DevBufferGatewayStr)
                        plist.SubItems.Add("")
                        plist.SubItems.Add(DevBufferRemoteAddrStr)
                        plist.SubItems.Add("")
                        plist.SubItems.Add("")
                        plist.SubItems.Add(DevBufferPort)
                        plist.SubItems.Add(DevBufferNumberDecStr)
                        plist.SubItems.Add("否")
                        plist.SubItems.Add(macstr)
                    End If
                Next
            End If

            If UBound(dataArray) >= 9 Then  '可跨网段通讯设备的返回信息
                For i = 1 To UBound(dataArray) / 9
                    DevBufferIpAddrStr = dataArray((i - 1) * 9 + 1)
                    DevBufferMaskStr = dataArray((i - 1) * 9 + 2)
                    DevBufferGatewayStr = dataArray((i - 1) * 9 + 3)
                    DevBufferGatewayStrMAC = dataArray((i - 1) * 9 + 4)
                    DevBufferRemoteAddrStr = dataArray((i - 1) * 9 + 5)
                    DevBufferRemoteAddrMACStr = dataArray((i - 1) * 9 + 6)
                    DevBufferMACSearchStr = dataArray((i - 1) * 9 + 7)
                    DevBufferPort = dataArray((i - 1) * 9 + 8)
                    DevBufferNumberDecStr = dataArray((i - 1) * 9 + 9)

                    macstr = DevBufferNumberDecStr

                    If UBound(dataArray) >= 9 Then DevBufferSerialNumStr = dataArray(10) Else DevBufferSerialNumStr = ""

                    poi = InStr(1, machinnos, DevBufferNumberDecStr)
                    If poi = 0 Then
                        machinnos = machinnos + DevBufferNumberDecStr
                        plist = ListView1.Items.Add(DevBufferIpAddrStr)
                        plist.SubItems.Add(DevBufferMaskStr)
                        plist.SubItems.Add(DevBufferGatewayStr)
                        plist.SubItems.Add(DevBufferGatewayStrMAC)
                        plist.SubItems.Add(DevBufferRemoteAddrStr)
                        plist.SubItems.Add(DevBufferRemoteAddrMACStr)
                        plist.SubItems.Add(DevBufferMACSearchStr)
                        plist.SubItems.Add(DevBufferPort)
                        plist.SubItems.Add(DevBufferNumberDecStr)
                        plist.SubItems.Add("是")
                        plist.SubItems.Add(macstr)
                        plist.SubItems.Add(DevBufferSerialNumStr)
                    End If
                Next
            End If
        End If
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListView1.Items.Clear()
        machinnos = ""

        Dim Remote As IPEndPoint = New IPEndPoint(IPAddress.Broadcast, PortNumber)
        ListenerSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1) '设为广播式发送
        Dim ByArr As Byte() = Encoding.GetEncoding(936).GetBytes("000")
        ListenerSock.SendTo(ByArr, ByArr.Length, SocketFlags.None, Remote)

        Dim SendInf As String = Now() & " SendTo:255.255.255.255:39192 Data:000"
        ListBox1.Items.Add(SendInf)
        ListBox1.SelectedIndex = ListBox1.Items.Count - 1
    End Sub

示例源码下载::VB.net网络SocketUDP通讯实时在线消费考勤门禁源代码-VB文档类资源-CSDN下载VB.net开发的SocketUDP通讯源代码,做为实时在线型消费考勤门禁的UDP服务器端,开启线更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/zhangjin7422/85373472

VB.net Socket Udp收、发数据包示例源码相关推荐

  1. UDP收/发广播包原理及步骤

    UDP收/发广播包原理及步骤 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口.因为同一主机上的程序使用网络是通过端口号来区分的. UDP Socket的使用 ...

  2. UDP打洞程序包的源码

    C#实现UDP打洞 转自:http://hi.baidu.com/sdfiyon/blog/item/63a6e039155e02f23a87ceb1.html 下面是UDP打洞程序包的源码: //W ...

  3. 数据包从源主机到达目标主机的过程

    情景一:同一广播域内,两台主机通信过程 ------------------------------------------------------------------- 两主机要通信时,要把应用 ...

  4. 数据包从源主机到达目标主机过程详解

    为了便于理解,先从同一广播域内两台主机通信开始叙述吧.只要能理解这些,那也就差不多可以理解跨路由传输过程了(两者不同之处在于源和目标MAC地址的转换). 情景一:同一广播域内,两台主机通信过程. 我们 ...

  5. python读取pcap获得端口_Python处理网络数据包示例(pcapy读pcap文件)

    Python处理网络数据包示例(pcapy读pcap文件) 最近在围观python,找了个pcapy处理pcap数据的代码 非常非常久以前的东西了,应该是在项目组做的半成品吧.今天重装机器,不经意翻出 ...

  6. Linux-什么是二进制包,源码包,RPM包,软件仓库

    博文说明[前言]: 本文将通过个人口吻介绍什么是二进制包,RPM包,源码RPM包(SRPM包),源码包,以及RPM常用命令,源码rpm的安装(*.src.rpm),源码包的安装步骤知识(./confi ...

  7. 物联网数据卡系统源码——物联网的主要应用领域

    万物互联时代,物联网的潜力毋庸置疑,其预言也在市场中得到论证.物联网,顾名思义,就是物物相连的互联网.这里有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络: 其二, ...

  8. 安卓Android收银系统手机app源码在线演示实景分享

    1,综述:安卓Android收银系统手机app源码版,部分在线实景页面介绍. 1.1,基于安卓8.0原生开发 1.2,完整源码,可独立部署 1.3,商家,店长,收银员,分权限使用 1.4,与桌面收银, ...

  9. 怎样加入� android private libraries 中的包的源码

    先上图: 这里以加入� afinal_0.5.1_bin.jar 为例. 第一步:加入�jar包到libs里面,系统自己主动把jar载入到android private libraries中: 第二步 ...

  10. MobileIMSDK怎样修改服务端核心jar包的源码并替换掉Java服务端的jar包

    场景 MobileIMSDK怎样将Java服务端运行起来以及打成jar包运行: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11 ...

最新文章

  1. 沃森世界研讨会前瞻:AI服务 了解客户情绪
  2. java值参_Java陷阱之慎用入参做返回值详解
  3. emoji表情 与 iconfont 一锅炖
  4. java注释跳转方法,Java自定义注解实现Router跳转
  5. 为什么我不再使用MVC框架
  6. 8086实时时钟实验(二)——《x86汇编语言:从实模式到保护模式》读书笔记06
  7. SpringMVC介绍之Validation
  8. c#调用c++的dll接口
  9. 蚂蚁金服自主研发的三地五中心异地多活解决方案获金融科技创新大奖
  10. hasChildNodes()
  11. 灰鸽子病毒——网络神偷之后应用最广的反弹端口***
  12. Python合并两个有序链表
  13. oracle混音插件教程,【图片】【教学】waves混音插件官方教学贴,长期更新_混音吧_百度贴吧...
  14. 双目测距原理 matlab,双目测距的基本原理
  15. vscode代码拼写错误检测插件
  16. 深入理解计算机系统(第二版)第四章知识整理
  17. c语言猴子吃桃问题(简洁做法)
  18. SAP批量查询组件BOM引用报表
  19. Javaweb学习笔记 servlet篇
  20. 神奇的 CSS,让文字智能适配背景颜色

热门文章

  1. 【Ansible】非完全离线安装Ansible和Ansible-tower
  2. SQL查询中的笛卡尔积现象解决方法
  3. JDY-1110B电压继电器
  4. Java语言之Integer类
  5. 安卓学习pdf_【手机电脑全平台通用】手把手教你制作可点读日语PDF!
  6. Echar的学习记录
  7. PHPEclipse安装与使用
  8. javascript模块化编程规范
  9. uniapp获取当前城市编号和信息
  10. react中可使用的video插件