2016-07-11 15 views
2

こんにちは私はsocketsを使い始めたばかりで、まだよく知っているわけではありません。基本的にはstring variableweb address(例:www.example.com/index.php?Example=StringExample)に渡してから返されますindex.phpはこのように見えた場合"Test Example":私は間違ってC++ WinSock PHPページからデータを取得しますか?

struct sockaddr_in SocketAddress; 
hostent* addr = gethostbyname("www.example.com/index.php?Example=StringExample"); 
int sizeofaddr = sizeof(addr); 
SocketAddress.sin_addr.s_addr = inet_addr(addr->h_name); 
SocketAddress.sin_port = htons(80); 
SocketAddress.sin_family = AF_INET; 

SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL); 
if (connect(Connection, (SOCKADDR*)&addr, sizeofaddr) != 0) 
{ 
    return 0; //Failed to Connect 
} 

char buffff[256]; 
recv(Connection, buffff, sizeof(buffff), NULL); 
//"Test Example" now stored in buffff 

何をしています:

<?php 

if($_GET['Example'] == "StringExample") 
{ 
    echo "Test Example"; 
} 

?> 

ここで私は、C++で試した何ですか?

Btw私の場合、librariesのようなものをboostなどのように使用したくない場合があります。ヘルプありがとう:

答えて

4
gethostbyname("www.example.com/index.php?Example=StringExample"); 

"www.example.com/index.php?Example=StringExample"は有効なサーバー名ではありません。これはURL全体です。サーバー名は "www.example.com"となります。 gethostbyname()はURLではなくサーバーの名前を受け取り、そのIPアドレスを返します。さらに、gethostbyname()は廃止されました。新しいコードでは、代わりにgetaddrinfo(3)関数を使用する必要があります。

これは明らかにHTTPのURLです。 HTTPを介してドキュメントをダウンロードするには、ソケットを接続するよりもはるかに多くの作業が必要です。ソケット接続を確立することは、HTTPサーバーから文書をダウンロードするプロセスの第一歩にすぎません。これに続いて、有効なHTTP要求を送信し、サーバーからHTTP応答を受信する必要があります。

curlのように、ソケット接続自体を処理するHTTPドキュメントをダウンロードするのに必要なクライアント側プロセス全体を実装するライブラリが多数あります。

しかし、これを実装しようとすると何も問題はありません。それは良いプログラミングexcersizeだ。

ので、www.example.comのIPアドレスを解決した後、あなたは

1にする必要があります)、デフォルトのHTTPポート、サーバーのポート80に接続します。

2) "/index.php?Example=StringExample"のHTTPリクエストを送信します。

3)HTTP応答を解析します。

HTTPリクエストとレスポンスのための仕様は、あなたがHTTPの要求と応答がどのように構成されるかの完全なドキュメントのために相談することができRFC 2616、によって定義されます。

1

あなたはソケットを使用してWebサーバーにアクセスしたい場合は、あなたが心に留めておく必要があります:

  • Webサーバー
  • へのTCP/IP接続を開くことができますが、その後、あなたがしなければなりませんhttpプロトコルは、あなたの例の場合は、自分自身

によって:

hostent* addr = gethostbyname("www.example.com"); 
//... 
const char* request = "GET index.html" 
send(Connection, request, strlen(request), NULL) 
//fetch index.html with a recv and parse it 

以上であるためにサーバーにアクセスしたい場合は、httpプロトコルでGET、PUT、POSTなどがどのように実装されているかを見て、Webサーバーに適切なコマンドを送信し、recv()応答を返さなければなりません。

関連する問題