Проверьте, подключен ли сокет перед отправкой данных
Я программирую простой код с использованием сокетного соединения в Perl:
$sock = new IO::Socket::INET(
PeerAddr => '192.168.10.7',
PeerPort => 8000,
Proto => 'tcp');
$sock or die "no socket :$!";
Затем отправка данных с использованием цикла:
while...
print $sock $str;
...loop
Есть ли способ вставить в цикл команду для проверки соединения? Что-то вроде:
while...
socket is up?
yes => send data
no => connect again and the continue with loop
...loop
РЕДАКТИРОВАТЬ ДОБАВИТЬ МОЙ КОД:
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);
1 ответ
IO:: Socket:: INET является подклассом IO:: Socket, который имеет connected
метод.
Если сокет находится в подключенном состоянии, адрес партнера возвращается. Если сокет не находится в подключенном состоянии, возвращается undef.
Вы можете использовать это в своем цикле и вызыватьconnect
на него, если чек вернулся undef
,
my $sock = IO::Socket::INET->new(
PeerAddr => '192.168.10.7',
PeerPort => 8000,
Proto => 'tcp'
);
$sock or die "no socket :$!";
while ( 1 ) {
unless ($sock->connected) {
$sock->connect($port, $ip) or die $!;
}
# ...
}