Нужно написать tcp клиента, который постоянно слушал бы порт и при поступлении сообщений на порт сразу же писал ответ и продолжал слушать.
Я написал так, хотя это наверно и не верно
#!/usr/bin/perl -w
use strict;
use IO::Socket;
my $host = \'localhost\';
my $port = 2345;
while (1){
my $socket = new IO::Socket::INET (
PeerAddr => $host,
PeerPort => $port,
Proto => "tcp",
Type => SOCK_STREAM)
or die "NE MOGU $port NA $host: $!";
local $| = 1;
print ( "It is work\\n");
if (defined (my $response = <$socket>)){
print ("Form sms-gate: $response");
my @parse_arr = split(/\\|/,$response);
print ($socket "$parse_arr[0]|$parse_arr[1]|$parse_arr[2]\\n");
}
print("done\\n");
close ($socket) or die ("i can\'t");
}
то есть я зациклил и программа постоянно слушает порт, получило сообщение пишет чтото в порт, отсоединяется и по новой соединяется и слушает порт. Знаю, что это изврат, но по другому у меня не получается додумать. Если пишу без while (1){ , а вместо if (defined (my $response = <$socket>)){ пишу while (defined (my $response = <$socket>)){ , то программа тоже слушает порт,все сообщения принимает, вроде пишет ответы в порт, НО не отправляет, а отправляет только при разрыве соединения. Может я не совсем понял суть работы с портами? Подскажите как можно написать грамотней. Потому что при существующем алгоритме сложно будет отправлять в порт к примеру 3 сообщения, они то отправяться, но как один ответ, а мне надо их отправлять как отдельные друг от друга сообщения.
Спасибо