2

C ++で小さなWebサーバーを開発しようとしていますが、画像ファイルを読み取ってソケットバッファーに書き込もうとすると問題が発生します。完全に機能するCで記述された同様の関数を見つけました。ブラウザでサーバーに接続し、画像ファイルを開くと、この方法が機能しない理由がわかりません。この出力が得られました。

「画像「http://127.0.0.1:7777/myimage.jpg」はエラーが含まれているため表示できません。」

これが私の方法です:

std::string
Client::getFileContent(const std::string& name)
{
    std::ifstream f;     f.open(name.c_str(), std::ios::binary);
    if( !f.is_open() )  {
        return (std::string(""));

    }  else  { 
        f.seekg(0, std::ios::end);
        unsigned int length = f.tellg(); 
        f.seekg(0, std::ios::beg);

        char* buffer = new char[length];    
        f.read(buffer, length);            

        f.close();

        return ( std::string(buffer) );
    }

}

そして、それをソケットバッファーに書き込みます(nsprソケットを使用):

void
Socket::send(const std::string& s)
{
    if(PR_Send(sock, s.c_str(), s.length(), 0, PR_INTERVAL_NO_WAIT) == -1)  {
        throw ( Exception::Exception(Exception::Exception::SOCKET_SEND) );
    }
}

そして、これは私がWebで見つけた機能です。なぜこれが完全に機能し、私の機能が機能しないのか理解できません。

    while ( (ret = read(file_fd, buffer, BUFSIZE)) > 0 ) {
        (void)write(fd,buffer,ret);

どうもありがとうございます :)

4

1 に答える 1

5

あなたの問題はここにあります:

return ( std::string(buffer) );

から文字列を作成するchar *と、最初の0バイトで停止しますが、画像には多くの文字列が含まれている場合があります。文字列を返す代わりにvector<char>

return std::vector<char>(buffer, buffer + length);
于 2011-12-05T19:37:12.917 に答える