2014-04-23 2 views
0

Я пытаюсь написать линкор с Perl, который можно воспроизводить по сети. Проблема в том, что я могу печатать только на той же консоли, но не на других консолях через сокет.Perl: Печать через розетку

Клиент:

$socket = new IO::Socket::INET(
    PeerHost => '127.0.0.1', 
    PeerPort => '5005', 
    Protocol => 'tcp' 
) or die "Socket konnte nicht erstellt werden!\n$!\n"; 

print "Client kommuniziert auf Port 5005\n"; 

while ($eing ne ".\n") { 
    $eing = <> ; 
    print $socket "$eing"; 
} 

Сервер:

$socket = new IO::Socket::INET(
    LocalHost => '127.0.0.1', 
    LocalPort => '5005', 
    Protocol => 'tcp', 
    Listen => 5, 
    Reuse  => 1 
) or die "Socket konnte nicht erstellt werden!\n$!\n"; 

while (1) { 
    $client_socket = $socket -> accept(); 
    $peeraddress = $client_socket -> peerhost(); 
    $peerport  = $client_socket -> peerport(); 

    $eing = ""; 
    while ($eing ne ".\n") { 
     print "while"; 
     &ausgabe; 
    } 
} 

sub ausgabe { 
    foreach $crt_board (@board2) { 
     foreach $spalte (@$crt_board) { 
      print $client_socket "$spalte ";  
     } 
     print $client_socket "\n"; 
    } 
} 

Результат должен быть совет, который выглядит следующим образом.

1 2 3 4 5 
1 ? ? ? ? ? 
2 ? ? ? ? ? 
3 ? ? ? ? ? 
4 ? ? ? ? ? 
5 ? ? ? ? ? 
+0

Какой выход вы ожидаете? –

+0

Я добавил его к вопросу. – ProfGhost

+0

Следовательно, я полагаю, что у вас есть входной файл «доска», который вы передаете клиенту, не так ли? –

ответ

2

Вам необходимо прочитать сокет, если вы хотите передавать данные с сервера на клиент, или наоборот. Всегда используйте строгие (и предупреждения). Ниже будет вам начать:

Клиент:

use strict; 
use IO::Socket::INET; 

my $socket = new IO::Socket::INET(
    PeerHost => '127.0.0.1', 
    PeerPort => '5005', 
    Protocol => 'tcp' 
) or die "Socket konnte nicht erstellt werden!\n$!\n"; 

print "Client kommuniziert auf Port 5005\n"; 

while (1) { 
    my $data; 
    $socket->recv($data, 64); 
    print $data; 
    last if $data =~ m#\.\n#; 
} 

Сервер:

use strict; 
use IO::Socket::INET; 

my $socket = new IO::Socket::INET(
    LocalHost => '127.0.0.1', 
    LocalPort => '5005', 
    Protocol => 'tcp', 
    Listen => 5, 
    Reuse  => 1 
) or die "Socket konnte nicht erstellt werden!\n$!\n"; 

while (my $client_socket = $socket -> accept()) { 
    my $peeraddress = $client_socket -> peerhost(); 
    my $peerport  = $client_socket -> peerport(); 

    ausgabe($client_socket); 
} 

sub ausgabe { 
    my $client_socket = shift; 
    my @board2 = ([" ", 1,2,3],[1,"?","?","?"], 
        [2,"?","?","?"], [3,"?","?","?"]); 
    foreach my $crt_board (@board2) { 
     foreach my $spalte (@$crt_board) { 
      $client_socket->send("$spalte ");  
     } 
     $client_socket->send("\n"); 
    } 
    $client_socket->send(".\n"); 
} 
+0

Спасибо, это сработало! – ProfGhost

Смежные вопросы