PoshCode Archive  Hex Artifact Content

Artifact 0f4888c70cb60f19a3af7ad0620249720fabf5f009526c6f90ccee40f64b8cc0:

  • File TCP-Client-Server.ps1 — part of check-in [494892dc2e] at 2018-06-10 14:20:32 on branch trunk — An example of a client/server that works in PowerShell (user: rtsssdada size: 1373)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 54  hell..# title: T
0030: 43 50 20 43 6c 69 65 6e 74 2f 53 65 72 76 65 72  CP Client/Server
0040: 0d 0a 23 20 64 65 73 63 72 69 70 74 69 6f 6e 3a  ..# description:
0050: 20 41 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20 61   An example of a
0060: 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 74   client/server t
0070: 68 61 74 20 77 6f 72 6b 73 20 69 6e 20 50 6f 77  hat works in Pow
0080: 65 72 53 68 65 6c 6c 0d 0a 23 20 76 65 72 73 69  erShell..# versi
0090: 6f 6e 3a 20 30 2e 31 0d 0a 23 20 74 79 70 65 3a  on: 0.1..# type:
00a0: 20 66 75 6e 63 74 69 6f 6e 0d 0a 23 20 61 75 74   function..# aut
00b0: 68 6f 72 3a 20 72 74 73 73 73 64 61 64 61 0d 0a  hor: rtsssdada..
00c0: 23 20 6c 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a  # license: CC0..
00d0: 23 20 66 75 6e 63 74 69 6f 6e 3a 20 6c 69 73 74  # function: list
00e0: 65 6e 2d 70 6f 72 74 0d 0a 23 20 78 2d 70 6f 73  en-port..# x-pos
00f0: 68 63 6f 64 65 2d 69 64 3a 20 36 37 35 39 0d 0a  hcode-id: 6759..
0100: 23 20 78 2d 61 72 63 68 69 76 65 64 3a 20 32 30  # x-archived: 20
0110: 31 37 2d 30 33 2d 33 31 54 30 33 3a 31 30 3a 32  17-03-31T03:10:2
0120: 33 0d 0a 23 20 78 2d 70 75 62 6c 69 73 68 65 64  3..# x-published
0130: 3a 20 32 30 31 37 2d 30 32 2d 32 37 54 32 31 3a  : 2017-02-27T21:
0140: 33 31 3a 30 30 0d 0a 23 0d 0a 23 0d 0a 66 75 6e  31:00..#..#..fun
0150: 63 74 69 6f 6e 20 6c 69 73 74 65 6e 2d 70 6f 72  ction listen-por
0160: 74 20 28 24 70 6f 72 74 3d 38 39 38 39 29 20 7b  t ($port=8989) {
0170: 0d 0a 20 20 20 20 24 65 6e 64 70 6f 69 6e 74 20  ..    $endpoint 
0180: 3d 20 6e 65 77 2d 6f 62 6a 65 63 74 20 53 79 73  = new-object Sys
0190: 74 65 6d 2e 4e 65 74 2e 49 50 45 6e 64 50 6f 69  tem.Net.IPEndPoi
01a0: 6e 74 20 28 5b 73 79 73 74 65 6d 2e 6e 65 74 2e  nt ([system.net.
01b0: 69 70 61 64 64 72 65 73 73 5d 3a 3a 61 6e 79 2c  ipaddress]::any,
01c0: 20 24 70 6f 72 74 29 0d 0a 20 20 20 20 24 6c 69   $port)..    $li
01d0: 73 74 65 6e 65 72 20 3d 20 6e 65 77 2d 6f 62 6a  stener = new-obj
01e0: 65 63 74 20 53 79 73 74 65 6d 2e 4e 65 74 2e 53  ect System.Net.S
01f0: 6f 63 6b 65 74 73 2e 54 63 70 4c 69 73 74 65 6e  ockets.TcpListen
0200: 65 72 20 24 65 6e 64 70 6f 69 6e 74 0d 0a 20 20  er $endpoint..  
0210: 20 20 24 6c 69 73 74 65 6e 65 72 2e 73 74 61 72    $listener.star
0220: 74 28 29 0d 0a 0d 0a 20 20 20 20 64 6f 20 7b 0d  t()....    do {.
0230: 0a 20 20 20 20 20 20 20 20 24 63 6c 69 65 6e 74  .        $client
0240: 20 3d 20 24 6c 69 73 74 65 6e 65 72 2e 41 63 63   = $listener.Acc
0250: 65 70 74 54 63 70 43 6c 69 65 6e 74 28 29 20 23  eptTcpClient() #
0260: 20 77 69 6c 6c 20 62 6c 6f 63 6b 20 68 65 72 65   will block here
0270: 20 75 6e 74 69 6c 20 63 6f 6e 6e 65 63 74 69 6f   until connectio
0280: 6e 0d 0a 20 20 20 20 20 20 20 20 24 73 74 72 65  n..        $stre
0290: 61 6d 20 3d 20 24 63 6c 69 65 6e 74 2e 47 65 74  am = $client.Get
02a0: 53 74 72 65 61 6d 28 29 3b 0d 0a 20 20 20 20 20  Stream();..     
02b0: 20 20 20 24 72 65 61 64 65 72 20 3d 20 4e 65 77     $reader = New
02c0: 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 49  -Object System.I
02d0: 4f 2e 53 74 72 65 61 6d 52 65 61 64 65 72 20 24  O.StreamReader $
02e0: 73 74 72 65 61 6d 0d 0a 20 20 20 20 20 20 20 20  stream..        
02f0: 64 6f 20 7b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  do {....        
0300: 20 20 20 20 24 6c 69 6e 65 20 3d 20 24 72 65 61      $line = $rea
0310: 64 65 72 2e 52 65 61 64 4c 69 6e 65 28 29 0d 0a  der.ReadLine()..
0320: 20 20 20 20 20 20 20 20 20 20 20 20 77 72 69 74              writ
0330: 65 2d 68 6f 73 74 20 24 6c 69 6e 65 20 2d 66 6f  e-host $line -fo
0340: 72 65 20 63 79 61 6e 0d 0a 20 20 20 20 20 20 20  re cyan..       
0350: 20 7d 20 77 68 69 6c 65 20 28 24 6c 69 6e 65 20   } while ($line 
0360: 2d 61 6e 64 20 24 6c 69 6e 65 20 2d 6e 65 20 28  -and $line -ne (
0370: 5b 63 68 61 72 5d 34 29 29 0d 0a 20 20 20 20 20  [char]4))..     
0380: 20 20 20 24 72 65 61 64 65 72 2e 44 69 73 70 6f     $reader.Dispo
0390: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 24 73  se()..        $s
03a0: 74 72 65 61 6d 2e 44 69 73 70 6f 73 65 28 29 0d  tream.Dispose().
03b0: 0a 20 20 20 20 20 20 20 20 24 63 6c 69 65 6e 74  .        $client
03c0: 2e 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20  .Dispose()..    
03d0: 7d 20 77 68 69 6c 65 20 28 24 6c 69 6e 65 20 2d  } while ($line -
03e0: 6e 65 20 28 5b 63 68 61 72 5d 34 29 29 0d 0a 20  ne ([char]4)).. 
03f0: 20 20 20 24 6c 69 73 74 65 6e 65 72 2e 73 74 6f     $listener.sto
0400: 70 28 29 0d 0a 7d 0d 0a 0d 0a 0d 0a 0d 0a 66 75  p()..}........fu
0410: 6e 63 74 69 6f 6e 20 73 65 6e 64 2d 6d 73 67 20  nction send-msg 
0420: 28 24 6d 65 73 73 61 67 65 3d 24 28 5b 63 68 61  ($message=$([cha
0430: 72 5d 34 29 2c 20 24 70 6f 72 74 3d 38 39 38 39  r]4), $port=8989
0440: 2c 20 24 73 65 72 76 65 72 3d 22 6c 6f 63 61 6c  , $server="local
0450: 68 6f 73 74 22 29 20 7b 0d 0a 20 20 20 20 24 63  host") {..    $c
0460: 6c 69 65 6e 74 20 3d 20 4e 65 77 2d 4f 62 6a 65  lient = New-Obje
0470: 63 74 20 53 79 73 74 65 6d 2e 4e 65 74 2e 53 6f  ct System.Net.So
0480: 63 6b 65 74 73 2e 54 63 70 43 6c 69 65 6e 74 20  ckets.TcpClient 
0490: 24 73 65 72 76 65 72 2c 20 24 70 6f 72 74 0d 0a  $server, $port..
04a0: 20 20 20 20 24 73 74 72 65 61 6d 20 3d 20 24 63      $stream = $c
04b0: 6c 69 65 6e 74 2e 47 65 74 53 74 72 65 61 6d 28  lient.GetStream(
04c0: 29 0d 0a 20 20 20 20 24 77 72 69 74 65 72 20 3d  )..    $writer =
04d0: 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73 74   New-Object Syst
04e0: 65 6d 2e 49 4f 2e 53 74 72 65 61 6d 57 72 69 74  em.IO.StreamWrit
04f0: 65 72 20 24 73 74 72 65 61 6d 0d 0a 20 20 20 20  er $stream..    
0500: 24 77 72 69 74 65 72 2e 57 72 69 74 65 28 24 6d  $writer.Write($m
0510: 65 73 73 61 67 65 29 0d 0a 20 20 20 20 24 77 72  essage)..    $wr
0520: 69 74 65 72 2e 43 6c 6f 73 65 28 29 0d 0a 20 20  iter.Close()..  
0530: 20 20 24 73 74 72 65 61 6d 2e 44 69 73 70 6f 73    $stream.Dispos
0540: 65 28 29 0d 0a 20 20 20 20 24 63 6c 69 65 6e 74  e()..    $client
0550: 2e 43 6c 6f 73 65 28 29 0d 0a 7d 0d 0a           .Close()..}..