Contenidos
En el siguiente ejemplo la imagen que vamos a mandar tiene un tamaño de 358 KB.
Script comentado para el cliente (envía la imagen en varias partes)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
## Cliente # Conexión IP con UDP $ip = [System.Net.IPEndPoint]::new([IPAddress]::Loopback,2020) $udp = [System.Net.Sockets.UdpClient]::new() # Leer una imagen png y convertirla a Bytes $Bytes = [System.IO.File]::ReadAllBytes('.\captura.png') # Ver el tamaño de la imagen $Bytes.Length # Para enviar por UDP el tamaño de cada datagrama tieen que ser menor de 65507 # El tamaño máximo de un paquete IP que incluye todos los # encabezados es de 65535 bytes. Los encabezados IP y UDP se combinan # para al menos 28 bytes. Así que el tamaño máximo de la porción de datos # de un datagrama UDP es 65535-28 == 65507 # Partes en la que habría que dividir la imagen y enviarla ($Bytes.Length / 65000) # Hacemos el envío de cada parte calculando los tamaños $udp.Send($Bytes,65000,$ip) | Out-Null $udp.Send($Bytes[65000..(65000*2)],65000,$ip) | Out-Null $udp.Send($Bytes[(65000*2)..(65000*3)],65000,$ip) | Out-Null $udp.Send($Bytes[(65000*3)..(65000*4)],65000,$ip) | Out-Null $udp.Send($Bytes[(65000*4)..(65000*5)],65000,$ip) | Out-Null $udp.Send($Bytes[(65000*5)..$Bytes.Length],$Bytes[(65000*5)..$Bytes.Length].Length,$ip) | Out-Null # Cerrar conexión UDP $udp.Close() |
Script comentado para el servidor (recibe la imagen en varias partes y después las junta)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
## Server # Conexión IP con UDP $ip = [System.Net.IPEndPoint]::new([IPAddress]::Any,0) $udp = [System.Net.Sockets.UdpClient]::new(2020) # Dependiendo del tamaño de la imagen que vamos recibir habrá que recibir # varios datagramas, en este caso son 6 $content1 = $udp.Receive([ref]$ip) $content2 = $udp.Receive([ref]$ip) $content3 = $udp.Receive([ref]$ip) $content4 = $udp.Receive([ref]$ip) $content5 = $udp.Receive([ref]$ip) $content6 = $udp.Receive([ref]$ip) # Juntar los datagramas en un fichero [System.IO.File]::WriteAllBytes('screenshotcopy2.bmp',$content1+$content2+` $content3+$content4+$content5+$content6) $udp.Close() |