使用perlHTTP::Daemon的HTTP服务器-只能在服务器运行的同一台计算机上运行



我将创建一个简单的HTTP服务器,我还将为它创建一些客户端。现在我正在通过浏览器测试在perl中使用HTTP::Daemon创建的简单服务器。

我的服务器代码如下:

use HTTP::Daemon;
use HTTP::Status;
my $d = HTTP::Daemon->new(LocalPort => 80,
                      Listen => 20) || die;
print "Web Server started!n";
print "Server Address: ", $d->sockhost(), "n";
print "Server Port: ", $d->sockport(), "n";

print "Please contact me at: <URL:", $d->url, ">n";
while (my $c = $d->accept) {
    print "received a request...n";
    while (my $r = $c->get_request) {
        print "URI: " . $r->uri->path . "n";
        if ($r->method eq 'GET' and $r->uri->path eq "/") {
            # remember, this is *not* recommended practice :-)
            $c->send_file_response("http_daemon_test.pl");
        }
        else {
            print "method: " . $r->method;
            print " uri:" . $r->uri . "n";
            $c->send_error(RC_FORBIDDEN, "please do not try again")
        }
    }
    $c->close;
    undef($c);
}

目前,我的问题是,当我在同一台机器上测试时,这个服务器工作正常。当我尝试通过同一网络中的另一台计算机访问服务器时,服务器根本不会收到请求。我是不是错过了向外界公开服务器的强制性步骤(也许很简单?我是个新手!)?

,我感谢你在这方面的帮助


更新:下面是我运行服务器时收到的输出示例:

Web服务器已启动!

服务器地址:0.0.0.0

服务器端口:80

请联系我:

收到请求。。。

收到请求。。。

URI:/

收到请求。。。

URI:/

收到请求。。。

收到请求。。。

URI:/


最新更新:

我意识到这个问题与我上面描述的不同。毕竟,我可以从另一台计算机访问我的服务器。正如您从代码中看到的,我并没有创建一个单独的线程来完成请求。奇怪的是,当我从浏览器访问服务器时,来自其他计算机的所有请求都会超时,直到我关闭最初发送请求的浏览器(并得到请求的答案)。同时,来自同一浏览器的多个请求被成功完成。不过,当我使用libwww-Perl库从用Perl编写的客户端发送请求时,这种情况不会发生。

这如何转化为最初的问题每次我想测试我的服务器时,我都会先在同一台机器上使用浏览器进行测试。然后,我尝试从另一台机器访问服务器,而不关闭我最初测试服务器时使用的浏览器;不出所料,它没有起作用。

谢谢你们的评论。

Q:电脑(例如"myhttpserver")有防火墙吗?你试过禁用它吗?

Q: 你试过"telnet myhttpserver 80"吗?你能"ping httpserver"吗?

这听起来更像是一个网络/网络配置问题,而不是一个编程问题。请确保主机可以互相查看,并且http端口处于打开状态。

您似乎没有在HTTP::Daemon构造函数的参数中定义LocalAddr。它可能默认为localhost,在这种情况下,您将看到与您提供的症状完全相同的症状。尝试添加

LocalAddr => '<your ip>'

到您的构造函数,看看它是否有助于

相关内容

  • 没有找到相关文章

最新更新