単純なHTTPサーバーを作成します。今私はブラウザでHTTP :: Daemonを使ってperlで作成した簡単なサーバーをテストしています。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:/
最新のアップデート:
問題は私のものとは違うことに気づいた上記でエスケープ。結局、私は別のコンピュータから私のサーバにアクセスすることができました。コードからわかるように、私は要求を満たすために別のスレッドを作成していません。不思議なことに、ブラウザからサーバーにアクセスすると、最初に要求を送信したブラウザーを閉じるまで(そして要求の答えを得て)、他のコンピューターからのすべての要求がタイムアウトになります。同時に、同じブラウザからの複数のリクエストが正常に実行されます。しかし、私がPerlで書かれたクライアントからのリクエストをlibwww-perlライブラリを使って送ったときに、これは起こりません。
これは最初の問題にどのように変換されますか? サーバーをテストするたびに、ブラウザを使用して同じマシンから最初にサーバーをテストしました。その後、私は最初にサーバをテストしたブラウザを閉じずに別のマシンからサーバにアクセスしようとしました。期待通りに動作しませんでした。
ご意見ありがとうございます。
だが、いくつかのより多くの情報を見てみましょうことができますかどうかを確認してみてください。サーバーを起動すると、いくつかのことが表示されます。それらを提供してください。それは確かに –