Сокет клиент / сервер Perl - PullRequest
1 голос
/ 23 июня 2011
--|proxy|--|mux|--|demux|--|proxy|--
                --
                --
                --
machineA   satellite link    machineB

172.16.1.224 172.16.1.218

Привет,

У меня есть настройки, как указано выше.Я пытаюсь создать 'mux'.По сути, он считывает трафик с прокси и разделяет его для передачи по 4 проводам.'Demux' считывает 4 провода и перенаправляет трафик на прокси.

У меня есть базовая настройка клиент / сервер в Perl.Но я не знаю, как получить трафик с прокси в 'mux'?

Вот мой код:

server.pl - работает на 172.16.1.218

use IO::Socket;
$| = 1;
$socket = new IO::Socket::INET (
    LocalHost => '172.16.1.218',
    LocalPort => '5000',
    Proto => 'tcp',
    Listen => 5,
    Reuse => 1
);
die "Coudn't open socket" unless $socket;
print "\nTCPServer Waiting for client on port 5000";

while(1)
{
        $client_socket = "";
        $client_socket = $socket->accept();
        $peer_address = $client_socket->peerhost();
        $peer_port = $client_socket->peerport();

        #print "\n I got a connection from ( $peer_address , $peer_port ) ";
        while (1){
                $send_data = <STDIN>;
                $client_socket->send($send_data);
                $client_socket->recv($recieved_data,10);
                print $recieved_data;#."\n";
                #$client_socket->autoflush(); 
        }
}

и:

client.pl

use IO::Socket;

$socket = new IO::Socket::INET (
    PeerAddr  => '172.16.1.224',
    PeerPort  =>  5000,
    Proto => 'tcp',
)
or die "Couldn't connect to Server\n";

while (1) {
        $socket->recv($recv_data,10);
        print $recv_data."\n";
        $send_data = <STDIN>;
        $socket->send($send_data);
}

Я просто немного застрял и буду благодарен за любые комментарии.

Большое спасибо заранее,

1 Ответ

2 голосов
/ 23 июня 2011
  • Ваш сервер обрабатывает только одно соединение.Вы должны использовать массив соединений (@socket).
  • У вас есть два бесконечных вложенных цикла.Поскольку внутреннее соединение никогда не завершится, вы будете посещать только первое соединение.

Это типичный сервер чата, поэтому я рекомендую вам поискать в Google «сервер чата perl».Здесь у вас есть некоторый исходный код, который может помочь:

http://sourceforge.net/projects/perlchat/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...