Php 将数据从web服务器发送到perl套接字侦听器

Php 将数据从web服务器发送到perl套接字侦听器,php,perl,sockets,Php,Perl,Sockets,我尝试将数据从php web脚本发送到本地perl套接字侦听器。 以下是perl服务器代码: #!/usr/bin/perl use IO::Socket::INET; use strict; $| = 1; my $web = new IO::Socket::INET ( LocalHost => '127.0.0.1', LocalPort => '9001', Proto => 'tcp', Listen => 5, R

我尝试将数据从php web脚本发送到本地perl套接字侦听器。 以下是perl服务器代码:

#!/usr/bin/perl

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

$| = 1;

my $web = new IO::Socket::INET (
    LocalHost => '127.0.0.1',
    LocalPort => '9001',
    Proto => 'tcp',
    Listen => 5,
    Reuse => 1
) or die "ERROR in Socket Creation : $!\n";

while ($web->accept()) {
    my $web_address = $web->peerhost();
    my $web_port = $web->peerport();

    print "Accepted New Web Client Connection From : $web_address, $web_port\n";

    my $data = <$web>;
    chomp ($data);
    print "Data from web: $data\n";
}
以下是perl脚本的输出:

Accepted New Web Client Connection From : , 
Data from web:
下面是php脚本的输出:

Socket created 
Connection established 
Message send successfully
那么,为什么它实际上不发送数据呢?

这个
$web->accept()
只创建并返回一个对象,该对象可用于读取句柄(用于套接字)。您正在尝试使用
$web
本身进行阅读,但它无法执行此操作。换句话说,
不会从套接字读取数据。PHP客户端已发送其消息,该消息位于缓冲区中等待读取

此外,当PHP客户端打印时,它正在填充缓冲区,因为在另一端没有任何东西在清空缓冲区(读取)。如果它在某一点打印的数量足够,缓冲区将满,下一次打印将挂起,只是等待。这是一个常见的错误源,当缓冲区没有被有序地读取时

您的代码需要做一些小的更改

if ( my $listen = $web->accept() ) {
    my ($buff, $recd);
    while (defined($buff = <$listen> ) { 
        chomp($recd = $buff);
        # process the line in $recd
    }
} else { warn "Error with the socket  -- $!"; }
这就是Perl代码的范围。我不知道PHP例程是如何工作的(它们对我来说似乎没问题)

虽然提供了基本信息,但Perl文档中的信息却非常分散。例如,在中有一个使用
IO::Socket
的服务器示例 ,在那一页的最后


如果我可以建议,请添加
使用警告在开头。它实际上非常有用。我怀疑它会警告你这一点。

更新了我的帖子:清理,更改了可能误导的术语。
if ( my $listen = $web->accept() ) {
    my ($buff, $recd);
    while (defined($buff = <$listen> ) { 
        chomp($recd = $buff);
        # process the line in $recd
    }
} else { warn "Error with the socket  -- $!"; }
my $listen = $web->accept();
my $recd = <$listen>;
chomp($recd);
print "$recd\n";