小型udp读取器,用来简化应用程序间消息的传送

更新日志:

2015-8-20 将-b开关改名为--hex

2015-8-20 增加-e开关,用于设置绑定的IP地址

修改了源程序里混淆不清的变量名


新的命令行格式:

udpReader <-p 端口号> [-e IP] [--hex] [-d] [--debug]

采用[--hex]开关后将打开十六进制输出,格式为 AA-AA-AA-AA

采用[-e IP]开关后可设置绑定的IP地址,在双网卡的情况下可通过地址选择要监听的网卡


命令行格式:

udpReader -p <端口号> [-b] [-d] [--debug]

采用[-b]开关后将打开十六进制输出,格式为 AA-AA-AA-AA

采用[-d]开关后将打开dump模式,接收到的UDP信息将被透明传送到控制台。

采用[--debug]开关后将打开调试输出。

接收到的UDP信息被送至console.stdout

错误信息被送至console.errout

目前采用同步接收,当程序使用完毕后,需用Ctrl+C终止进程或用Kill杀死进程。

基于GNU v2协议发布。

Imports System.Text
Imports System.Net
Imports System.Net.Sockets

Module Module1
    Dim i As Integer
    Dim l As Integer
    Dim g_lArgUdpPort As Int32 = 0
    Dim g_blArgDispHex As Boolean = False
    Dim g_blArgDump As Boolean = False
    Dim g_blArgVerbose As Boolean = False
    Dim g_strArgEndPointIP As String = ""
    Dim objUdpClient As UdpClient
    Dim objIPEndPoint As IPEndPoint
    Dim objIPSrcPoint As IPEndPoint

    Sub Main()
        ReadArgs()
        RecvLoop()
    End Sub

    Sub RecvLoop()
        Do While True
            Dim byteRecvData As [Byte]()
            Dim strRecvData As String
            Dim objArray As Array
            byteRecvData = objUdpClient.Receive(objIPSrcPoint)
            strRecvData = Encoding.ASCII.GetString(byteRecvData)
            If g_blArgDump = True Then
                Console.Write(strRecvData)
            Else
                Console.Write("v0.02::len=" + Format(byteRecvData.Length, "0000"))
                If g_blArgDispHex = True Then
                    objArray = strRecvData.ToCharArray
                    l = objArray.Length
                    Console.Write(":data=")
                    For i = 0 To l - 1
                        Dim x As Integer
                        x = Asc(objArray(i))
                        Console.Write(Hex(x / 16))
                        Console.Write(Hex(x Mod 16))
                        If i < l - 1 Then
                            Console.Write("-")
                        End If
                    Next
                    Console.WriteLine()
                Else
                    Console.WriteLine(":text=" + strRecvData)
                End If
            End If
        Loop
    End Sub

    Sub ReadArgs()
        Dim strMyArg As String() = System.Environment.GetCommandLineArgs
        If strMyArg.Length < 2 Then
            Console.Error.WriteLine("udpReader v0.02")
            Console.Error.WriteLine("Usage: udpReader <-p PORT> [-e 
   
   
    
    ] [--hex] [-d] [--debug]")
            End
        End If

        l = strMyArg.Length
        For i = 0 To l - 1
            Dim s As String
            s = strMyArg(i)
            If s = "-d" Then
                g_blArgDump = True
            End If
            If s = "--hex" Then
                g_blArgDispHex = True
            End If
            If s = "-e" Then
                If i + 1 < l Then
                    g_strArgEndPointIP = strMyArg(i + 1)
                End If
            End If
            If s = "-p" Then
                If i + 1 < l Then
                    Try
                        g_lArgUdpPort = Convert.ToInt32(strMyArg(i + 1))
                    Catch ex As Exception
                        Console.Error.WriteLine("You should specify a port after -p for use.")
                        End
                    End Try
                End If
            End If
            If s = "--debug" Then
                g_blArgVerbose = True
            End If
        Next
        If g_blArgVerbose = True Then
            Console.Error.WriteLine("udpReader v0.02")
            Console.Error.WriteLine("udpReader::Debug:g_lArgUdpPort=" + g_lArgUdpPort.ToString)
            Console.Error.WriteLine("udpReader::Debug:g_blArgDispHex=" + g_blArgDispHex.ToString)
            Console.Error.WriteLine("udpReader::Debug:g_blArgDump=" + g_blArgDump.ToString)
            If g_strArgEndPointIP <> "" Then
                Console.Error.WriteLine("udpReader::Debug:g_strArgEndPointIP=" + g_strArgEndPointIP)
            End If
        End If

        If g_blArgDump = True And g_blArgDispHex = True Then
            Console.Error.WriteLine("Sorry, dump mode conflicts with binary mode.")
            End
        End If


        If g_lArgUdpPort < 1 Or g_lArgUdpPort > 65535 Then
            Console.Error.WriteLine("Port should be a number of 1 to 65535.")
            End
        End If

        Try
            If g_strArgEndPointIP = "" Then
                objUdpClient = New UdpClient(g_lArgUdpPort)
            Else
                objIPEndPoint = New IPEndPoint(IPAddress.Parse(g_strArgEndPointIP), g_lArgUdpPort)
                objUdpClient = New UdpClient(objIPEndPoint)
            End If
        Catch ex As Exception
            Console.Error.WriteLine("Error: Could not open the UDP Port " + g_lArgUdpPort.ToString + ".")
            End
        End Try

        If g_blArgVerbose = True Then
            Console.Error.WriteLine("udpReader::Debug:Now listening on the port " + g_lArgUdpPort.ToString + ".")
        End If
        objIPSrcPoint = New IPEndPoint(IPAddress.Any, 0)
    End Sub
End Module
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值