自己写的powershell发送udp数据代码,下面是示例,可供参考,用powershell来进行单元测试也很方便
$Ip = "127.0.0.1"
$Port = 12345
$SendBufSize = 512
# 定义协议帧头
class MyFrameHead {
[Byte]$Version = 0x01;
[Byte]$Type
[Byte]$Length_MSB
[Byte]$Length_LSB
[Byte[]]$Reserved = [Byte[]]::new(4)
}
$FrameHead = [MyFrameHead]::new()
$FrameHead.Type = 0x00
$FrameHead.Length_MSB = 0x00
$FrameHead.Length_LSB = 0x28
for($i=0; $i -lt 4; $i++)
{
$FrameHead.Reserved[$i] = 0;
}
# 定义协议数据内容
class MyData {
[Byte[]]$Data = [Byte[]]::new(32)
}
$Data = [MyData]::new()
for($i=0; $i -lt 32; $i++)
{
$Data.Data[$i] = $i;
}
# 协议数据发送类
class MySendHelper {
[Byte[]]$Buf = [Byte[]]::new($SendBufSize) #发送缓冲区
[Int]$SendSize #要发送的数据长度
[System.Net.Sockets.UdpClient]$UdpClient #udp socket
# 将帧头序列化至发送缓冲区
[Void]SerializeFrameHead([MyFrameHead]$FrameHead, [Int]$Pos) {
$this.Buf[$Pos] = $FrameHead.Version;
$this.Buf[$Pos+1] = $FrameHead.Type;
$this.Buf[$Pos+2] = $FrameHead.Length_MSB;
$this.Buf[$Pos+3] = $FrameHead.Length_LSB;
for($i=0; $i -lt 4; $i++)
{
$this.Buf[$Pos+4+$i] = $FrameHead.Reserved[$i];
}
}
# 将数据部分序列化至发送缓冲区
[Void]SerializeData([MyData]$Data, [Int]$Pos) {
for($i=0; $i -lt 32; $i++)
{
$this.Buf[$Pos+$i] = $Data.Data[$i];
}
}
}
$SendHelper = [MySendHelper]::new()
$SendHelper.SerializeFrameHead($FrameHead, 0)
$SendHelper.SerializeData($Data, 8)
$SendHelper.SendSize = 40 # 实际发送UDP数据长度
$SendHelper.UdpClient = New-Object System.Net.Sockets.UdpClient # 初始化udp套接字
if($Null -eq $SendHelper.UdpClient)
{
Write-Error "Udp create socket error"
return;
}
$DoTimes = 0 #执行次数
while($DoTimes -lt 1000)
{
#执行发送
$SendHelper.UdpClient.Send($SendHelper.Buf, $SendHelper.SendSize, $Ip, $Port)
$DoTimes++
Start-Sleep -s 1
}
$SendHelper.UdpClient.Close()