【问题标题】:Perl Socket Conditional doesn't workPerl 套接字条件不起作用
【发布时间】:2013-02-19 01:49:35
【问题描述】:

我正在尝试创建一个服务器和客户端,其中服务器根据客户端发送的内容向客户端返回不同的消息。如果客户端建立连接但什么都不发送,服务器将返回消息 1,如果客户端发送了一些数据,服务器将返回消息 2。但这不起作用,客户端保持等待数据并且没有任何打印。

客户:

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";  
};

【问题讨论】:

  • 始终使用use strict; use warnings;
  • "如果 clint 建立连接但不发送任何内容,则服务器返回消息 1",不,它没有。服务器等待客户端无条件发送。

标签: perl sockets client-server conditional


【解决方案1】:

需要咀嚼

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";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多