C++プサーバーが送信される簡単なHTMLのお客様
質問
現在、私はろとこんなことになる。
#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サーバー機能