2

私の目標は、サーバーアプリケーションとの間で単純なバイト配列を送受信することです(単純なJavaツール、すべての要求に対して30バイトで固定応答を返します)。

次のコードで最初の部分(TCP経由でバイト配列を送信)を完了しました:

 # Define port and target IP address 
  [int] $Port = 2222
  $IP = "172.16.0.51"
  $Address = [system.net.IPAddress]::Parse($IP) 

  # Create IP Endpoint 
  $End = New-Object System.Net.IPEndPoint $address, $port 

  # Create Socket 
  $Saddrf = [System.Net.Sockets.AddressFamily]::InterNetwork 
  $Stype = [System.Net.Sockets.SocketType]::Stream 
  $Ptype = [System.Net.Sockets.ProtocolType]::TCP
  $Sock = New-Object System.Net.Sockets.Socket $saddrf, $stype, $ptype 
  $Sock.TTL = 26 

  # Connect to socket 
  $sock.Connect($end)

  # Create byte array
  # TCP [Byte[]] $Message = 0xAA,0x55,0x00,0x12,0x00,0x00,0x00,0x7B,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0xD6,0xDE,0xD5,0xA7,0x14,0x00
  [Byte[]] $Message = 0xAA,0x55,0x00,0x12,0x00,0x00,0x00,0x7B,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0xD6,0xDE,0xD5,0xA7,0x14,0x00

 # for ($i=0; $i -le 1000; $i++)
 # {
  # Send the byte array 
  $Sent = $Sock.Send($Message)
  "{0} characters sent to: {1} " -f $Sent,$IP
  "Message is: $Message" 
  # End of Script
 # }

しかし、そのようなリクエストを送信した直後にレスポンスを受信できるコードを見つけたり、追加したり、作成したりすることはできません。誰かが私を助けてくれませんか?

ありがとうございました。

4

2 に答える 2

0

MSDNのSystem.Net.Sockets.Socketクラスのドキュメントを確認してください。このクラスにはReceive、ストリームからデータを読み取るために使用できるさまざまなメソッドがあります。

于 2012-06-08T17:54:12.793 に答える
0

ありがとう、最終的に私は次のコードを持っています:

# Getting responses  
    $script:compare = new-object System.Byte[] 40  
    $end = 0  
    do  
    {  
            # Receive response  
        Start-Sleep -m 30  
        $buffer = new-object System.Byte[] 40  
        $Received = $Sock.Receive($buffer)  
        if (@(Compare-Object $buffer $compare).length -ne 0)  
        {     
            Write-Host "TCP Message received:" $buffer  
            # Encode received response to ASCII  
            $Encode = new-object "System.Text.ASCIIEncoding"  
            $test = $Encode.GetString($buffer)  
            Add-Content -value "$(Time) $test" -Path tcp_response.log  
            $end = 1  
        }  
    } while ($end -eq 0)'
于 2012-06-09T16:48:06.140 に答える