Powershell socket发送UDP数据,组帧示例

自己写的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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值