更新日志:
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