我将创建一个简单的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>'
到您的构造函数,看看它是否有助于