Perl客户端/服务器套接字

时间:2011-06-23 10:38:35

标签: perl sockets

--|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 个答案:

答案 0 :(得分:2)

  • 您的服务器只处理一个连接。您应该使用连接数组(@socket)。
  • 你有两个嵌套的无限循环。由于内部永远不会完成,所以你只会参加第一次连接。

这似乎是一个典型的聊天服务器,因此我建议您在Google上搜索“perl聊天服务器”。这里有一些可以提供帮助的源代码:

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