2

Perl でソケットを使用してチャット サーバーを作成しようとしています。ただし、サーバー プログラムを実行すると、次のエラーが表示されます。

"ERROR:(9)(Bad file descriptor)(6)(+The handle is invalid) at Server.pl line 21."

クライアントプログラムを実行すると、次のエラーが表示されます。

「ソケットを作成できません: ターゲット マシンがアクティブに拒否したため、接続できませんでした。」

サーバープログラムは次のとおりです。

#!usr/bin/perl
#server.pl

use IO::Socket;
$| = 1;

print "Server Program\n";
my $lp = 12000;

my $server_socket, $new_client, $addr, $port;

$server_socket = new IO::Socket::INET (
LocalHost => '127.0.0.1',
LocalPort => $lp,
Proto => 'tcp',
Reuse => 1) or die "Cannot create the socket: $!\n";

print "Server started at port $lp \n";

while (1) {
    $new_client = $server_socket->accept() or die sprintf "ERROR:(%d)(%s)(%d)(+%s)", $!,$!,$^E,$^E;

$addr = $new_client->peerhost();
$port = $new_client->peerport();
print "Connected to client at $addr at port $port ";
while(<$new_client>) {
    print "Following is the text entered by client: \n";
    print "$_";
}
print "Client now disconnecting..\n";
close $new_client;
}

$server_socker->close();

そして、ここにクライアントがあります:

#!usr/bin/perl
#client.pl

use IO::Socket;
$| = 1;

print "Client Program\n";

my $lp = 12000;

my $client_socket = new IO::Socket::INET (
PeerHost => '127.0.0.1',
PeerPort => $lp,
Proto => 'tcp',
Reuse => 1) or die "Cannot create the socket: $!\n";

print "Server connected at port $lp \n";
print "Enter the text to sent to the server: \n";
$user_input = <>;
chomp $user_input;
print $plient_socket;
$client_socket->send($user_input);
$client_socket->close();

私はこれが初めてで、どこが間違っているのかわかりません。誰か助けてくれませんか?

4

1 に答える 1

6

リッスンしていないソケットからの接続を受け入れようとしています。追加

Listen => SOMAXCONN,

次に、コードに関するトピック外のコメントについて:

  • 常に使用しますuse strict; use warnings;。コードの他のいくつかの問題が強調表示されます。

  • シバン行の相対パスには意味がありません。がありません/

  • スタイルの面では、変数が使用される前に変数を宣言するのは悪い形式と見なされます。変数を宣言することの全体的なポイントは、そのスコープを制限することであるため、プログラムの先頭で変数を宣言することは目的に反します。

  • LocalHost => '127.0.0.1'(より適切にLocalHost => INADDR_LOOPBACK) は、127.0.0.1 からの接続のみを受信できるようにします。それは役に立つかもしれませんが、意図的にそうしたかどうかはわかりません。デフォルトの ではINADDR_ANY、任意のインターフェイスからの接続が許可されます。

于 2013-01-10T04:47:29.053 に答える