2016-10-14 10 views
0
try 
{ 
    $tcp = new-object System.Net.Sockets.TcpClient 

    $tcp.ReceiveTimeout = 500 
    $tcp.SendTimeout = 500 

    $tcp.Connect('127.0.0.1',80) 
    Write-Host "Connection possible!" 
    $tcp.close() 
} 
catch 
{ 
    Write-Host "Cannot connect!" 
    $_.Exception.Message 
} 

Measure-Command - 21 SekundenSystem.Net.Sockets.TcpClient langsam in Power

If $tcp.Connect('127.0.0.1',80,$Null) 

Measure-Command (immer 21!) - 10 Millisekunden

Warum?

Ich weiß, dass es keinen $ Null-Parameter geben sollte, aber warum ist es schnell damit?

+0

$ tcp.Connect zwei Parameter nehmen nicht drei https://msdn.microsoft.com/en-us/library/d7ew360f(v=vs.110). aspx. Mit drei Parametern auslösen Ausnahme: Kann nicht verbinden! Eine Überladung für "Connect" und die Anzahl der Argumente kann nicht gefunden werden: "3". Es dauert 1 Sekunde, um mit Erfolg Verbindung in meiner Maschine mit 2 Parametern zu laufen. –

Antwort

1

Ich weiß, dass es keine $ Null param sein, aber warum ist schnell es mit ihm?

Weil Ihr Code kaputt ist.

try 
{ 

} 
catch 
{ 
} 

holt jeden möglichen Fehler und Ausblenden der Fehlermeldungen.

Ihr erster Code, der Fehler ist eine echte TCP-Verbindung, die nach einer Wartezeit von ~ 30 Sekunden abgelaufen ist, und die Verbindung ist wirklich fehlgeschlagen.

Ihre zweite Code ist der Fehler „Kann nicht eine Überlastung für Connect finden, die 3 Parameter nimmt“ - aber Sie verbergen den Fehler und falsch Druck statt ‚kann nicht‘. Dies führt dich in die Irre. Es ist nicht schneller, es ist kaputt.

Die Timeouts für Senden und Empfangen sind nicht für Verbindungen, sie sind Timeouts für die Methoden zum Senden und Empfangen von Daten. Es gibt keine Möglichkeit, das Verbindungszeitlimit mit der Methode .connect() zu ändern. Dazu müssen Sie eine asynchrone Verbindung ohne Ihr eigenes Zeitlimit herstellen.

z.B. How to set the timeout for a TcpClient? und How to configure socket connect timeout (beide C#, aber immer noch. NET und die Ideen gelten für PowerShell).

Und die https://superuser.com/questions/805621/test-network-ports-faster-with-powershell, die für eine Antwort hat

Powershell
+0

Danke, wenn (! $ tcp.ConnectAsync (" 234234 ", 80) .Wait (500)) {'fail'} löst alles –

0

$tcp.Connect('127.0.0.1',80,$Null) löst eine Ausnahme Cannot find an overload for "Connect" and the argument count: "3". Lesen Sie mehr hier: MDSN Documentation

+0

Ich sehe es. Aber warum funktioniert es schnell mit $ null? Ich meine, es funktioniert schnell in beide Richtungen, wenn Port wirklich in Ordnung ist. Wenn nicht - nur $ Null-Variante funktioniert schnell –

+0

Ich weiß es nicht. Auf meinem Computer endete dieser Code nach Millisekunden – Endorphinex

+1

@IgorKuznetsov Ist es erfolgreich oder Fehler? Ich denke, der Punkt, den Endorphinex macht, ist, dass der Code schnell endet, weil er Fehler macht, nicht, dass er gültige Ergebnisse zurückgibt. – JClaspill