【问题标题】:Error in perl chat serverperl 聊天服务器中的错误
【发布时间】:2013-01-10 12:47:29
【问题描述】:

我正在尝试使用 Perl 中的套接字创建聊天服务器。但是,当我运行服务器程序时,我得到了错误:

“Server.pl 第 21 行的错误:(9)(错误的文件描述符)(6)(+句柄无效)。”

当我运行客户端程序时出现错误:

"无法创建套接字:无法建立连接,因为目标机器 主动拒绝了。”

这是服务器程序:

#!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();

我是新手,我没有找到错误的地方。有人可以帮忙吗?

【问题讨论】:

    标签: perl


    【解决方案1】:

    您试图接受来自未监听的套接字的连接。添加

    Listen => SOMAXCONN,
    

    现在关于你的代码的题外话:

    • 始终使用use strict; use warnings;。它将突出显示您的代码的其他一些问题。

    • shebang 线上的相对路径没有任何意义。你错过了/

    • 在样式方面,在使用变量之前声明变量被认为是错误的形式。声明变量的全部意义在于限制它们的范围,因此在程序顶部声明它们违背了目的。

    • LocalHost =&gt; '127.0.0.1'(最好写成LocalHost =&gt; INADDR_LOOPBACK)使您只能接收来自 127.0.0.1 的连接。这可能很有用,但我不知道你是否故意这样做。默认值 INADDR_ANY 允许来自任何接口的连接。

    【讨论】:

    • 嘿,非常感谢!这有帮助。我认为如果我的默认值 Listen 是 5,所以我没有把它放在代码中,以为它会以默认值结束。
    • 幸好不是这样,因为Listen =&gt; 5 会破坏你的客户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2018-06-05
    • 2015-11-05
    • 2011-12-01
    相关资源
    最近更新 更多