2014-04-23 92 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