2012-06-08 2 views
2

Mon but est d'envoyer et de recevoir des tableaux d'octets simples depuis/vers l'application serveur (outil Java simple, renvoyant une réponse fixe de 30 octets à toutes les requêtes).Envoyer/recevoir des tableaux d'octets via TCP

J'ai terminé la première partie (envoi tableau d'octets via TCP) avec le code suivant:

# 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 
# } 

Mais je ne peux pas trouver/ajouter/créer un code capable de recevoir des réponses juste après l'envoi de ces demandes. Quelqu'un pourrait-il m'aider s'il vous plaît?

Merci.

Répondre

0

Merci, enfin je le code suivant:

# 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)' 
+0

inadéquate. Vous ignorez la valeur retournée par la méthode de réception, qui est une indication EOS, une indication d'erreur ou la longueur des données reçues. Au lieu de cela, vous supposez que la lecture a rempli tout le tampon. Vous ne pouvez pas supposer cela avec TCP. – EJP

+0

EJP, merci pour cette bonne remarque. Je ne peux pas poster de code associé dans ce commentaire, donc je vais créer une réponse séparée pour cela. – TShark