1

クライアントからのリクエストを受け入れる HTTP サーバーを Perl で作成しました。

現在、リクエストを送信しているクライアントは 1 つだけです。

これが私のセットアップの方法です:

クライアント --> サーバー (これはインターネットに接続するプロキシ サーバーでもあります)、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();

このサーバーを起動してクライアントからリクエストを送信しようとすると、リクエストがファイルに書き込まれるため、リクエストがサーバーによってキャプチャされたように見えます。

サーバー側とクライアントで他にどのような構成を行う必要があるか教えてください。

4

1 に答える 1

1

あなたが書くなら

$| = 1;

その場合、フラッシュはデフォルトの出力ファイルハンドルに対してのみ有効になります。これはビルトインSTDOUTで変更されない限りselect()です。だからFHここではフラッシュされません — これはあなたの意図だったと思います. 代わりに、書く必要があります

FH->autoflush(1);
于 2013-09-17T09:55:32.623 に答える