質問

現在、私はろとこんなことになる。

#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include <cassert>

const char html[] = "HTTP/1.1 200 OK\r\n"
"Connection: close\r\n"
"Content-type: text/html\r\n"
"\r\n"
"<html>\r\n"
"<head>\r\n"
"<title>Hello, world!</title>\r\n"
"</head>\r\n"
"<body>\r\n"
"<h1>Hello, world!</h1>\r\n"
"</body>\r\n"
"</html>\r\n\r\n";

int main() {
    WSADATA wsa;

    assert( WSAStartup( MAKEWORD( 2, 2 ), &wsa ) == 0 );

    addrinfo *res = NULL;
    addrinfo hints;

    ZeroMemory( &hints, sizeof( hints ) );

    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    assert( getaddrinfo( NULL, "80", &hints, &res ) == 0 );

    SOCKET s = socket( res->ai_family, res->ai_socktype, res->ai_protocol );

    assert( s != INVALID_SOCKET );
    assert( bind( s, res->ai_addr, (int)res->ai_addrlen ) != SOCKET_ERROR );
    assert( listen( s, SOMAXCONN ) != SOCKET_ERROR );

    SOCKET client = accept( s, NULL, NULL );

    assert( client != INVALID_SOCKET );

    char buffer[512];
    int bytes;

    bytes = recv( client, buffer, 512, 0 );

    for ( int i = 0; i < bytes; ++i ) {
        std::cout << buffer[i];
    }

    assert( send( client, html, strlen( html ) - 1, 0 ) > 0 );
    assert( shutdown( client, SD_BOTH ) != SOCKET_ERROR );

    closesocket( client );
    WSACleanup();

    return 0;
}

私はコンパイルや実行こそナビゲート127.0.0.1私のブラウザを取得します自分のコンソール:

GET/HTTP/1.1

主催:127.0.0.1

接続:keep-alive

ユーザーエージェント:Mozilla/5.0(Windows;U;Windows NT5.1;en-US)AppleWebKit/530.5(K HTMLのように、ゲ)クローム/2.0.172.8サファリ/530.5

Cache-Control:max-age=0

Accept:application/xml、application/xhtml+xml、text/html;q=0.9,text/plain;q=0.8,image/png、/;q=0.5

Accept-Encoding:gzip、deflate,bzip2,sdch

Accept-Language:ブックマークグループを開くと、en;q=0.8

Accept-Charset:ISO-8859-1では、utf-8;q=0.7,*;q=0.3

編集 -を更新しましたが、HTMLいを発信していきま私が試されることMozilla Firefox、Google Chromeで動作Firefox、Chrome!

編集2 -ではなく、この理由でしたFirefox、Chrome、FirefoxでのHTMLとして受けた、クロムを待つ接続を閉前だけ電源をオンにする"というrendering.私は追加のコードのソケットにあります。更新しました自分のコードのソースです。

役に立ちましたか?

解決

を送る必要がありますのステータスライン:

HTTP/1.1 200OK

前のご対応できます。

参照フィドラーズ(www.fiddler2.comになりましたが、よう適切にHTTP応答を検出します。

については後で編集すべてのブラウザ待ちのために一定量のデータを開始する前にレンダリング;クロームの制限とは異なるFirefox。また、Content-Lengthを使HTTPのチャンクエンコードという見て適切な行動です。

他のヒント

見Mongoose http://code.google.com/p/mongoose/ でもつくれる図書館を下記からダウンロードできhttp webサーバで、超シンプルなapi(未完了).いて数分以内で結合するので、既存のアプリです。

また、同じ質問今(いっC++アプリケーションでは、ウェブ) をC++アプリケーションでは、HTTP Webサーバー機能

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top