Comment se connecter à un socket tcp avec powershell pour envoyer et recevoir des données?

J'ai écrit un petit script Powershell.

Il utilise .Net Système.IO.StreamReader et du Système.IO.StreamWriter pour lire et écrire des données depuis/vers le socket TCP.

Je tiens à vous connecter à une prise telnet style et envoyer/recevoir des commandes.

Je suis en train de lire les lignes avec les ReadLine() la méthode du Système.IO.StreamReader, mais les données à partir du serveur peut-être ne pas arriver à temps(?) ou IDK. Je ne suis pas à l'aide de commandes asynchrones. Merci de m'aider!

Voici mon script:

$FTPServer = "localhost"
$FTPPort = "21"

$tcpConnection = New-Object System.Net.Sockets.TcpClient($FTPServer, $FTPPort)
$tcpStream = $tcpConnection.GetStream()
$reader = New-Object System.IO.StreamReader($tcpStream)
$writer = New-Object System.IO.StreamWriter($tcpStream)
$writer.AutoFlush = $true

while ($tcpConnection.Connected)
{
    while ($tcpStream.DataAvailable)
    {
        $reader.ReadLine()
    }

    if ($tcpConnection.Connected)
    {
        Write-Host -NoNewline "prompt> "
        $command = Read-Host

        if ($command -eq "escape")
        {
            break
        }

        $writer.WriteLine($command) | Out-Null
    }
}

$reader.Close()
$writer.Close()
$tcpConnection.Close()

Et voici le résultat:

PS C:\Windows\System32\WindowsPowerShell\v1.0> test.ps1
220 Microsoft FTP Service
prompt> user username
331 Password required
prompt> pass password
230-Directory has 58,145,996,800 bytes of disk space available.
prompt> 
230 User logged in.
500 Command not understood.
prompt> help
214-The following commands are recognized (* ==>'s unimplemented).
    ABOR 
    ACCT 
    ADAT *
    ALLO 
    APPE 
    AUTH 
    CCC 
    CDUP 
    CWD 
    DELE 
    ENC *
    EPRT 
    EPSV 
    FEAT 
    HELP 
    HOST 
    LANG 
    LIST 
    MDTM 
    MIC *
    MKD 
    MODE 
    NLST 
    NOOP 
    OPTS 
    PASS 
    PASV 
    PBSZ 
    PORT 
    PROT 
    PWD 
    QUIT 
    REIN 
    REST 
    RETR 
    RMD 
    RNFR 
    RNTO 
    SITE 
prompt> escape

PS C:\Windows\System32\WindowsPowerShell\v1.0>
Il est un exemple ici. C'est la mise en œuvre de l'OI à l'aide de tampons. Je pense que dans votre code, vous manquez le TCP en entrée lors de l'attente pour l'entrée de l'utilisateur. Aussi cette une est mis en œuvre à l'aide de tampons.

OriginalL'auteur gazsiazasz | 2015-04-20