先日ネットワークプログラムの件で質問させていただき、みなさんにこころよく協力していただきました
とりあえずチャットプログラムを・・・と思ったんですが、チャット以前にネットワークの知識がないので、『猫でもわかるネットワークプログラミング』という参考書を購入し、読み進めているところです
が・・・早くも第2章でつまづきまして・・・
タイトルの通りのコンソールアプリを(ソースは参考書に載っていたのでそれを打ち込んだ)作ったんですが、実行はできるものの上手く動作していないようで、質問させていただきました
ソースは以下の通りです
#include <stdio.h> #include <windows.h> #include <wininet.h> #pragma comment(lib, "wininet.lib" ) // WinInet.Lib int main() { HINTERNET hInet, hUrl; char szBuf[128], szUrl[128], *lpszSrc; DWORD dwRead, dwTotal = 0; HGLOBAL hMem; // 目的のURLの入力 printf("URL -> "); gets_s(szUrl); // インターネット(WinInet)開始 hInet = InternetOpen((LPCWSTR)"test_winInet", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); // チェック1 if (hInet == NULL) { perror("オープンエラー\n"); return -2; } // HTTPセッションの開始、指定のURLオープン hUrl = InternetOpenUrl(hInet, (LPCWSTR)szUrl, NULL, 0, 0, 0); // チェック2 if (hUrl == NULL) { perror("URLオープンエラー\n"); InternetCloseHandle(hInet); return -3; } // lpszSrsに1バイトのみ確保 hMem = GlobalAlloc(GHND, 1); lpszSrc = (char *)GlobalLock(hMem); // 読み出すものがなくなるまで読み出す while (1) { InternetReadFile(hUrl, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead); szBuf[dwRead] = '\0'; // 読み出すものがなくなったのでループ脱出 if (dwRead == 0) break; // 必要バイト数の計算 dwTotal += dwRead; // 確保領域の大きさ変更 hMem = GlobalReAlloc(hMem, dwTotal + 1, GMEM_MOVEABLE); if (hMem == NULL) { perror("再アロケート失敗\n"); } lpszSrc = (char *)GlobalLock(hMem); if (lpszSrc == NULL) { perror("メモリ確保に失敗\n"); break; } strcat(lpszSrc, szBuf); } // while (1) // ソースの表示 printf("%s\n", lpszSrc); // メモリの解放 GlobalUnlock(hMem); GlobalFree(hMem); // インターネットハンドルの解放 InternetCloseHandle(hUrl); InternetCloseHandle(hInet); return 0; }チェック1の第1引数と、チェック2の第2引数はエラーが出たため自分なりにキャストしてみました
OS:windowsXP
C++
どなたかお力添えをお願いします