Ich programmiere einen einfachen Code-Socket-Verbindung in Perl mit:Überprüfen Sie, ob Steckdose, bevor das Senden von Daten verbunden ist
$sock = new IO::Socket::INET(
PeerAddr => '192.168.10.7',
PeerPort => 8000,
Proto => 'tcp');
$sock or die "no socket :$!";
Dann werden die Daten mit einer Schleife zu senden:
while...
print $sock $str;
...loop
Gibt es eine Möglichkeit zu Fügen Sie in die Schleife einen Befehl ein, um die Verbindung zu überprüfen. Etwas wie:
while...
socket is up?
yes => send data
no => connect again and the continue with loop
...loop
EDIT MY CODE ADD:
my $sock = new IO::Socket::INET(
PeerAddr => '192.168.10.152',
PeerPort => 8000,
Proto => 'tcp');
$sock or die "no socket :$!";
open(my $fh, '<:encoding(UTF-8)', 'list1.txt')
or die "Could not open file $!";
while (my $msdn = <$fh>) {
my $port="8000";
my $ip="192.168.10.152";
unless ($sock->connected) {
$sock->connect($port, $ip) or die $!;
}
my $str="DATA TO SEND: " . $msdn;
print $sock $str;
}
close($sock);
ja, aber das ist nicht immer genug http://perldoc.perl.org/IO/Socket.html#connected (auch Rückgabewert von 'überprüfen soll -> write()') –
Sorry, aber ich verstehe nicht. Ich habe bereits eine Schleife, um eine Datei Zeile für Zeile zu lesen und dann innerhalb der Schleife Daten an den Server zu senden. Dies funktioniert perfekt, aber, wenn aus irgendwelchen Gründen, der Server die Verbindung zu schließen, Beenden der Anwendung ohne Ende alle Zeilen zu senden. Ich verstehe nicht, wie kann ich implementieren: $ socket-> connect, wenn $ socket-> connected; in einer Art und Weise kann ich wieder einen Socket erstellen (erneut verbinden), bevor Sie weiter Daten aus der Schleife senden. –
@LucasRey Ich glaube nicht, dass Sie einen neuen Socket erstellen müssen. Sie wollen nur wieder verbinden, was diese Zeile tut. Setzen Sie es an den Anfang der Schleife (mein 'while (1)' war nur so, dass es im Beispiel eine Schleife gibt) und schreibe danach. Das sollte es tun. – simbabque