PoshCode Archive  Hex Artifact Content

Artifact 78c6ccf24337c2c92344f5708198490ab72b3db23ee744e7ad13645d94c882df:

  • File TCP-Client-Server.ps1 — part of check-in [3e0bfc339c] at 2018-06-10 13:43:35 on branch trunk — An example of a client/server that works in PowerShell (user: Joel Bennett size: 1382)

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 4a 6f 65 6c 20 42 65 6e 6e 65 74  hor: Joel Bennet
00c0: 74 0d 0a 23 20 6c 69 63 65 6e 73 65 3a 20 43 43  t..# license: CC
00d0: 30 0d 0a 23 20 66 75 6e 63 74 69 6f 6e 3a 20 6c  0..# function: l
00e0: 69 73 74 65 6e 2d 70 6f 72 74 0d 0a 23 20 78 2d  isten-port..# x-
00f0: 70 6f 73 68 63 6f 64 65 2d 69 64 3a 20 34 36 30  poshcode-id: 460
0100: 31 0d 0a 23 20 78 2d 61 72 63 68 69 76 65 64 3a  1..# x-archived:
0110: 20 32 30 31 37 2d 30 32 2d 32 31 54 30 39 3a 30   2017-02-21T09:0
0120: 39 3a 34 34 0d 0a 23 20 78 2d 70 75 62 6c 69 73  9:44..# x-publis
0130: 68 65 64 3a 20 32 30 31 34 2d 31 31 2d 31 31 54  hed: 2014-11-11T
0140: 31 38 3a 31 36 3a 30 30 0d 0a 23 0d 0a 23 0d 0a  18:16:00..#..#..
0150: 0d 0a 66 75 6e 63 74 69 6f 6e 20 6c 69 73 74 65  ..function liste
0160: 6e 2d 70 6f 72 74 20 28 24 70 6f 72 74 3d 38 39  n-port ($port=89
0170: 38 39 29 20 7b 0d 0a 20 20 20 20 24 65 6e 64 70  89) {..    $endp
0180: 6f 69 6e 74 20 3d 20 6e 65 77 2d 6f 62 6a 65 63  oint = new-objec
0190: 74 20 53 79 73 74 65 6d 2e 4e 65 74 2e 49 50 45  t System.Net.IPE
01a0: 6e 64 50 6f 69 6e 74 20 28 5b 73 79 73 74 65 6d  ndPoint ([system
01b0: 2e 6e 65 74 2e 69 70 61 64 64 72 65 73 73 5d 3a  .net.ipaddress]:
01c0: 3a 61 6e 79 2c 20 24 70 6f 72 74 29 0d 0a 20 20  :any, $port)..  
01d0: 20 20 24 6c 69 73 74 65 6e 65 72 20 3d 20 6e 65    $listener = ne
01e0: 77 2d 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e  w-object System.
01f0: 4e 65 74 2e 53 6f 63 6b 65 74 73 2e 54 63 70 4c  Net.Sockets.TcpL
0200: 69 73 74 65 6e 65 72 20 24 65 6e 64 70 6f 69 6e  istener $endpoin
0210: 74 0d 0a 20 20 20 20 24 6c 69 73 74 65 6e 65 72  t..    $listener
0220: 2e 73 74 61 72 74 28 29 0d 0a 0d 0a 20 20 20 20  .start()....    
0230: 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 24 63  do {..        $c
0240: 6c 69 65 6e 74 20 3d 20 24 6c 69 73 74 65 6e 65  lient = $listene
0250: 72 2e 41 63 63 65 70 74 54 63 70 43 6c 69 65 6e  r.AcceptTcpClien
0260: 74 28 29 20 23 20 77 69 6c 6c 20 62 6c 6f 63 6b  t() # will block
0270: 20 68 65 72 65 20 75 6e 74 69 6c 20 63 6f 6e 6e   here until conn
0280: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..        
0290: 24 73 74 72 65 61 6d 20 3d 20 24 63 6c 69 65 6e  $stream = $clien
02a0: 74 2e 47 65 74 53 74 72 65 61 6d 28 29 3b 0d 0a  t.GetStream();..
02b0: 20 20 20 20 20 20 20 20 24 72 65 61 64 65 72 20          $reader 
02c0: 3d 20 4e 65 77 2d 4f 62 6a 65 63 74 20 53 79 73  = New-Object Sys
02d0: 74 65 6d 2e 49 4f 2e 53 74 72 65 61 6d 52 65 61  tem.IO.StreamRea
02e0: 64 65 72 20 24 73 74 72 65 61 6d 0d 0a 20 20 20  der $stream..   
02f0: 20 20 20 20 20 64 6f 20 7b 0d 0a 0d 0a 20 20 20       do {....   
0300: 20 20 20 20 20 20 20 20 20 24 6c 69 6e 65 20 3d           $line =
0310: 20 24 72 65 61 64 65 72 2e 52 65 61 64 4c 69 6e   $reader.ReadLin
0320: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
0330: 20 77 72 69 74 65 2d 68 6f 73 74 20 24 6c 69 6e   write-host $lin
0340: 65 20 2d 66 6f 72 65 20 63 79 61 6e 0d 0a 20 20  e -fore cyan..  
0350: 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 28 24        } while ($
0360: 6c 69 6e 65 20 2d 61 6e 64 20 24 6c 69 6e 65 20  line -and $line 
0370: 2d 6e 65 20 28 5b 63 68 61 72 5d 34 29 29 0d 0a  -ne ([char]4))..
0380: 20 20 20 20 20 20 20 20 24 72 65 61 64 65 72 2e          $reader.
0390: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
03a0: 20 20 20 24 73 74 72 65 61 6d 2e 44 69 73 70 6f     $stream.Dispo
03b0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 24 63  se()..        $c
03c0: 6c 69 65 6e 74 2e 44 69 73 70 6f 73 65 28 29 0d  lient.Dispose().
03d0: 0a 20 20 20 20 7d 20 77 68 69 6c 65 20 28 24 6c  .    } while ($l
03e0: 69 6e 65 20 2d 6e 65 20 28 5b 63 68 61 72 5d 34  ine -ne ([char]4
03f0: 29 29 0d 0a 20 20 20 20 24 6c 69 73 74 65 6e 65  ))..    $listene
0400: 72 2e 73 74 6f 70 28 29 0d 0a 7d 0d 0a 0d 0a 0d  r.stop()..}.....
0410: 0a 0d 0a 66 75 6e 63 74 69 6f 6e 20 73 65 6e 64  ...function send
0420: 2d 6d 73 67 20 28 24 6d 65 73 73 61 67 65 3d 24  -msg ($message=$
0430: 28 5b 63 68 61 72 5d 34 29 2c 20 24 70 6f 72 74  ([char]4), $port
0440: 3d 38 39 38 39 2c 20 24 73 65 72 76 65 72 3d 22  =8989, $server="
0450: 6c 6f 63 61 6c 68 6f 73 74 22 29 20 7b 0d 0a 20  localhost") {.. 
0460: 20 20 20 24 63 6c 69 65 6e 74 20 3d 20 4e 65 77     $client = New
0470: 2d 4f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 4e  -Object System.N
0480: 65 74 2e 53 6f 63 6b 65 74 73 2e 54 63 70 43 6c  et.Sockets.TcpCl
0490: 69 65 6e 74 20 24 73 65 72 76 65 72 2c 20 24 70  ient $server, $p
04a0: 6f 72 74 0d 0a 20 20 20 20 24 73 74 72 65 61 6d  ort..    $stream
04b0: 20 3d 20 24 63 6c 69 65 6e 74 2e 47 65 74 53 74   = $client.GetSt
04c0: 72 65 61 6d 28 29 0d 0a 20 20 20 20 24 77 72 69  ream()..    $wri
04d0: 74 65 72 20 3d 20 4e 65 77 2d 4f 62 6a 65 63 74  ter = New-Object
04e0: 20 53 79 73 74 65 6d 2e 49 4f 2e 53 74 72 65 61   System.IO.Strea
04f0: 6d 57 72 69 74 65 72 20 24 73 74 72 65 61 6d 0d  mWriter $stream.
0500: 0a 20 20 20 20 24 77 72 69 74 65 72 2e 57 72 69  .    $writer.Wri
0510: 74 65 28 24 6d 65 73 73 61 67 65 29 0d 0a 20 20  te($message)..  
0520: 20 20 24 77 72 69 74 65 72 2e 44 69 73 70 6f 73    $writer.Dispos
0530: 65 28 29 0d 0a 20 20 20 20 24 73 74 72 65 61 6d  e()..    $stream
0540: 2e 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20  .Dispose()..    
0550: 24 63 6c 69 65 6e 74 2e 44 69 73 70 6f 73 65 28  $client.Dispose(
0560: 29 0d 0a 7d 0d 0a                                )..}..