1

Ubuntu で実行されている apache2.2 から LAN ネットワーク経由で http ファイル転送 (ビデオ ファイル) を送信しようとしています。
ファイルが提供された後、クライアントが応答しなくなります。apache2 のログには、get 要求に対する応答コード 200 が記録されています。Wireshark のレポートを調べたところ、多くの「継続または非 http トラフィック」が表示されます。このエラーが発生する理由がわかりません。データ パケットを配置したり、ネットワーク層で構成する必要がある方法はありますか? (プロキシなど) ? 以下はサーバーコードです。

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use File::Copy qw( copy );
use File::Spec::Functions qw( catfile );
use POSIX qw(strftime);
use Time::Local;
use HTTP::Status qw(:constants :is status_message);
use Digest::MD5 qw(md5 md5_hex md5_base64);
use File::Basename;
#use File::Slurp;
use URI;
use utf8;


my $extfile = '/home/suresh/clientrequest.txt';
open(FH, ">>$extfile") or die "Cannot open file";
my $query = CGI->new;
my $stcode = status_message(206);
my $uri =$ENV{'REQUEST_URI'};
my $rdate =strftime("%a, %d %b %Y %H:%M:%S %Z", localtime());
print FH "Client request: ", $ENV{'REQUEST_URI'}, "\n";
my $dir  = '/srv/samba/Assets';
my $nffFile = fileparse ("$uri", qr/\.[^.]*/);
my $fullFname = $nffFile . ".nff";
my $path = catfile($dir, $fullFname);
my $filesize = -s $path;
print FH "Size of the file: ", $filesize, "\n";
print FH "Requested File: ", $fullFname, "\n";
#Search requested asset files
opendir(DIR, $dir);
my @files = readdir(DIR);
if (grep($_=~/$fullFname/,@files)){
    print FH "Found the requested NFF file: ", $fullFname, "\n";

#    open my $fh, '<:raw', $path;
open (FILE, "< $path") or die "cannot open $fullFname\n";

print "$ENV{SERVER_PROTOCOL} 206 $stcode";
print("Content Type: application/octet-stream\n\n");


while (<FILE>) {

        print;
}
sleep(1);
close FILE or die "Cannot close the file";

}
4

1 に答える 1

0

この問題を解決しました。この問題は、破損した realtek ドライバー r8169 にあり、カーネルとインターフェイスによってパケットがドロップされました。最新のドライバーである8168をインストールすると、問題は解決しました。

于 2013-10-10T18:28:43.677 に答える