2016-11-08 10 views
0

Ich habe ein Test-Server-Programm in Delphi erstellt, indem ich TIdTCPServer verwendet, das mehrere Server auf demselben PC simuliert, indem der Bindung mehrere Ports durch den Aufruf IdTCPServer1.Bindings.Add hinzugefügt werden. Das funktioniert gut.So simulieren Sie einen Socket-Fehler

Aber ich möchte auch einen Netzwerk-Unplugged-Fehler für einen Port zu simulieren, die einen Socket-Fehler an den Client zurückgeben sollte. Ich habe Bindings.Delete für diesen Port versucht und auch CloseSocket versucht, aber ohne Erfolg. Haben Sie Ideen, wie Sie diesen Fehler durch Deaktivieren oder Löschen eines Ports simulieren können?

+0

Ich nehme an, Sie könnten die Server-Komponente freigeben, aber das ist eine ziemlich schmutzige Art, es zu tun. –

+1

Sie können einen Lese-Timeout verursachen, indem Sie nichts senden, und Sie können einen Verbindungs-Reset durchführen, indem Sie SO_LINGER mit Null-Timeout einschalten und den Socket schließen, aber Sie können keinen Kabelzug- oder Routerausfall simulieren. – EJP

+1

Legen Sie eine Firewall-Regel fest, um einen Port- oder IP-Adressbereich zu blockieren, wenn Sie Netzwerkverlust oder Verbindungsverlust simulieren möchten. – selbie

Antwort

0

ich gepostet als Kommentar, aber jetzt, wo ich darüber nachdenke, ich glaube, dies die „beste Ansatz“ Antwort ist (obwohl es vielleicht nicht, was Sie erhofft hatten):

Das Betriebssystem wird „schützen“ Sie, so dass das Simulieren eines Netzwerkfehlers auf einer einzelnen Maschine ein fast unmöglicher Kopfschmerz ist.

ABER, mit einer VM (virtuelle Maschine), können Sie es einfach tun - verwenden Sie die VM als "Client", um eine Verbindung zu Ihrer Server-Anwendung und dann die VM ohne Warnung zu beenden (Ausschalten der virtuellen Maschine) - voilà ein Netzwerkfehler auftritt.

Alternativ implementieren Sie ein Benutzer-TCP/IP-Protokoll über einen Raw-Socket, unter Umgehung der Betriebssystemkernschicht ... eine VM ist einfacher.

+0

Ich habe dieses Programm speziell gemacht, um zu vermeiden, dass verschiedene Maschinen/VMs laufen, um den Multi-Client-Arbeitsablauf zu testen. Ich werde andere Möglichkeiten erkunden, bevor ich den VM-Weg gehe. Vielen Dank. – user173399

Verwandte Themen