【问题标题】:Perl HTTP server not reading requests from clientsPerl HTTP 服务器不读取来自客户端的请求
【发布时间】:2013-09-17 09:10:01
【问题描述】:

我在 Perl 中创建了一个 HTTP 服务器来接受来自客户端的请求。

目前只有一个客户端正在发送请求。

我的设置是这样的:

客户端 --> 服务器(这是代理服务器以及连接到互联网),在 Ubuntu 上运行的 Apache 2。

这是我的服务器的 Perl 代码:

#!/usr/bin/perl 

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

use LWP::Simple;

# auto-flush on socket
$| = 1;
my $port = 7890;

# Create a listening port

my $socket = new IO::Socket::INET(
  LocalHost => '127.0.0.1',
  LocalPort => shift || $port,
  Proto     => 'tcp',
  Listen    => SOMAXCONN,
  Reuse     => 1
) or die "cannot create socket $!\n";

# open a file and write client requests to the file
$| = 1;
open(FH, '>>', '/home/suresh/clientrequest.txt')
    or die "could not open the /home/suresh/clientrequest : $!\n";

print FH "server waiting for client on port\n"
    or die "could not write to file : $!\n";

while (my $client_socket = $socket->accept()) {

  $client_socket->autoflush(1);

  #print FH "Welcome to $0 \n";

  my $client_address = $socket->peerhost();
  my $client_port    = $client_socket->peerport();
  print FH "connection from $client_address:$client_port\n";

  # read from connected client
  my $data = "";
  $client_socket->recv($data, 1024);
  print FH "Data received from $client_address:$client_port: $data\n";

  # write response data to the client
  $data = "Sucessfully processed your request";
  $client_socket->send($data);

  shutdown($client_socket, 1);
}

close(FH);
$socket->close();

当我启动此服务器并尝试从客户端发送请求时,请求会写入文件,因此看起来请求已被服务器捕获。

谁能告诉我在服务器端和客户端我需要做哪些其他配置?

【问题讨论】:

    标签: perl httpserver


    【解决方案1】:

    如果你写

    $| = 1;
    

    然后只为 default 输出文件句柄激活刷新。这是STDOUT,除非使用内置的select() 进行更改。所以FH 没有在这里刷新——我想这是你的意图。相反,你必须写

    FH->autoflush(1);
    

    【讨论】:

    • 感谢 Slaven,您的建议奏效了。我可以先将“打印”写入文件。但是while循环中的'print'语句没有被执行。可能不接受来自客户端的连接?我认为,我不需要 while 循环,因为我知道只有一个客户端连接到该服务器。请提出建议。
    • 在更改 autoflush 之后,您的脚本对我有用。我多次调用lwp-request http://localhost:7890/foo,我看到日志文件中附加了一些内容。
    • 再次感谢 Slaven,它在重新启动 PC 后对我有用。不知道是什么原因导致之前没用。
    猜你喜欢
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2013-03-07
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多