2013-03-04 74 views
0

我正在嘗試創建服務器和客戶端,其中服務器根據客戶端發送的內容向客戶端返回不同的消息。如果客戶端建立連接但什麼都不發送,服務器將返回消息1,並且如果客戶端發送了一些數據,服務器將返回消息2.但是這不起作用,客戶端一直在等待數據並且沒有打印任何東西。Perl Socket有條件不起作用

客戶:

use IO::Socket; 

my $sock = new IO::Socket::INET (
    PeerAddr => '10.1.1.28', 
    PeerPort => '7070', 
    Proto => 'tcp'); 

if (@ARGV != "") { 
    print $sock "$ARGV[0] $ARGV[1]"; 

} else { 
    $data = <$sock>; 
    print $data; 
}  

$sock->close; 

服務器

use IO::Socket; 
my $sock = new IO::Socket::INET (
    LocalHost => '10.1.1.28', 
    LocalPort => '7070', 
    Proto => 'tcp', 
    Listen => '1', 
    ); 

while(1) { 
    my $new_sock = $sock->accept(); 

    if (<$new_sock> ne "") {   
     print $new_sock "conection with parameters"; 
    } else { 
     print $new_sock "default message"; 
}; 
+0

始終使用'使用嚴格的;使用警告;' – ikegami 2013-03-04 20:36:50

+0

「如果clint建立連接但不發送任何東西,則服務器返回消息1」,否則不會。服務器等待客戶無條件發送一些東西。 – ikegami 2013-03-04 20:38:08

回答

0

需要的Chomp

use IO::Socket; 
use Data::Dumper; 
my $sock = new IO::Socket::INET(
    LocalPort => '7070', 
    Proto  => 'tcp', 
    Listen => '1', 
); 

while (1) { 
    my $new_sock = $sock->accept(); 
    my $in  = <$new_sock>; 
    chomp($in);   
    if ($in ne "") { 

     print Dumper($in); 
     print $new_sock "conection with parameters"; 
    }      
    else { 
     print $new_sock "default message"; 
    } 
}