Webページを閲覧するために、次のwin32ソケットプログラムを作成しました。私はランタイムへの依存を避けるためにwingwを使用しています。 ipaddressesを取得するには、www.google.com、www.yahoo.comなどのURLにコマンドプロンプトを使用してpingを実行し、プログラムでこれらのIPアドレスを使用します。ポートはofcourse 80です。私のWindowsソケットプログラムは、FireFox、IEなどのブラウザのいくつかのURLを開くことができません。
"GET/\ r \ n"を使用してGoogle、Yahooなどのデフォルトページを取得できます。また、 "GET /newsite/index.aspx"を使用して、http://yasini.com/newsite/index.aspxのようなディレクトリ内のものでも、デフォルト以外のページを取得することもできます。プログラムの出力は、ウェブサーバから受信したHTMLの形で、ハードディスクに保存されています。このファイルは後でfirefoxで開き、コミュニケーションはどのようになったのかを確認します。
私はfirefoxで開くことができるテストウェブページhttp://a.domaindlx.com/trysite/hello.aspを作成しました。次に、ドメインa.domaindlx.comにpingして、このipaddress、66.36.238.30を取得します。 "GET /trysite/hello.asp"を使って上記のページにアクセスしようとしましたが、 "このアドレスにはWebサイトが設定されていません。このアドレスにはWebサイトが設定されていません。
私は、上記の応答がWebサーバーによって送信されたことを知っていますので、Webサーバーに接続できました。問題は、ウェブサーバーが私がアクセスしようとしているURLを認識していないことです。私はhtmとaspの両方の異なるWebページを使用しており、誰もアクセス可能ではありません。
ブラウザで直接ipaddressを使用してウェブサイトを開こうとすると、「ウェブサイトが設定されていません...」という同じエラーが表示されます。
基本的なパズルがポート80
#include windows.h #include stdio.h WSADATA ws; int d; char aa[1000]; struct sockaddr_in a; SOCKET s; int li; void abc(char *p) { FILE *fp = fopen("c:\\data.htm", "a+"); fprintf(fp, "%s\n", p); fclose(fp); } _stdcall WinMain (HINSTANCE i, HINSTANCE j, char * k, int l) { d = WSAStartup(0x101, &ws); sprintf(aa, "WSASTARTUP = %d", d); abc(aa); s = socket(AF_INET, SOCK_STREAM, 0); sprintf(aa, "SOCKET = %d", s); abc(aa); a.sin_family = AF_INET; a.sin_port = htons(80); //a.sin_addr.s_addr = inet_addr("74.125.236.145"); a.sin_addr.s_addr = inet_addr("66.36.238.30"); //a.domaindlx.com //a.sin_addr.s_addr = inet_addr("206.225.85.18"); //www.domaindlx.com //a.sin_addr.s_addr = inet_addr("87.248.122.122"); //www.yahoo.com //a.sin_addr.s_addr = inet_addr("72.167.153.9"); //www.yasini.com d = connect(s, (struct sockaddr *) &a, sizeof(a)); strcpy(aa, "GET /trysite/hello.asp\r\n"); strcat(aa, "HTTP 1.0 \r\n\r\n"); send(s, aa, sizeof(aa), 0); li = 1; while(li != 0) { li = recv(s, aa, 1000, 0); abc(aa); } }でWebサーバとの接続を開いた意味、私のコードは基本的にブラウザであるとき、なぜこれらのページは、Firefoxなどのブラウザ経由ではなく、私のコードからアクセスでき、あります
注:コードが機能するには、インクルード行にヘッダーファイル名を山括弧で囲んでください。私はhtmlをプロパティフォーマットに取り除かなければならなかった。
優れたlibcurlライブラリを気にする必要はありませんか?ポータブル、固体、無料。 – rushman