アドレス指定
CInternetSession *session = new CInternetSession(_T("http sample"));
httpCon = session->GetHttpConnection(strServerName, nPort);
httpFile = httpCon->OpenRequest(CHttpConnection::HTTP_VERB_GET,strObject);
httpFile->AddRequestHeaders(_T("Accept: text/*\r\nUser-Agent:
http_Sample\r\n"));
httpFile->SendRequest();
httpFile->QueryInfoStatusCode(dwRet);
と通常手順できてその後ステータスがOKなら読み込みます。
try {
do {
count = httpFile->Read( buff, 2048 ); <----ここでとまるのです。
buff[count] = 0;
total += count;
*fileCont += buff;
} while (count == 2048 && total < 204800);
}
オブジェクトを破棄して終了。
つぎのアドレスについて繰り返す。
以上数十個のアドレスについては正常に作動するが、いずれとまるのです。
なにか本来やっておくべきことが抜けているのでしょうか?調べるのに疲れました。
HELP!
Toshi
Toshi wrote:
> count = httpFile->Read( buff, 2048 ); <----ここでとまるのです。
確証はありませんが、Read()で止まるということはEOFに
達していないのにデータの続きが来ない状況が考えられ、
一番疑わしいのはkeep-alive絡みかな、と。
# HTTP/1.1ではkeep-aliveがデフォルトで、WinInetが
# 送信するリクエストを見るとConnectionヘッダがないので、
# コネクションが切断されるのを延々と待っているのでは
# ないかと...。
CHttpFile::AddRequestHeaders()で"Connection: close"を
追加してみるとか、CHttpConnection::OpenRequest()で
INTERNET_FLAG_KEEP_CONNECTIONフラグを試してみるとか。
# まぁ、あくまで可能性の話ということで^^;)
--
植田システム設計事務所
Ueta System Design Studio
植田真一
usde...@par.odn.ne.jp
Shin-ichi Ueta wrote:
> 一番疑わしいのはkeep-alive絡みかな、と。
そういうわけではなさそうですね^^;)
一応WinInet側もHTTP/1.1を通知していますし、
www.microsoft.co.jp が相手でも問題ありません。
単にダウンロードしようとしているリソースがデカいとか、
ネットワークが滞っているとか、サーバーがトロいとか、
その辺りの問題はありませんか?
あとは、オブジェクトのdeleteを忘れているとか...?
質問にあったコードに各オブジェクトのClose()とdeleteを
加えて、サーバーに100回リクエストを投げてみましたが、
それらしい現象は再現できませんでした。
# Win98SE+VC6SP5
# 同じサブネット内のWWWサーバーから1864bytesの
# HTMLファイルをダウンロード
> 単にダウンロードしようとしているリソースがデカいとか、
リソースは10k~40kぐらいです。
> ネットワークが滞っているとか、サーバーがトロいとか、
ケーブルネットです。サーバーも含めそんなにトロくはな
いと思います。
> あとは、オブジェクトのdeleteを忘れているとか...?
closeとdeleteはちゃんと入れています。
それから私もWin98SE+VC6です。
Toshi
Shin-ichi Ueta <usde...@par.odn.ne.jp> wrote in message
news:OJb8ab84BHA.2740@tkmsftngp07...
Toshi
momiji_teruyama <ma...@p1.coralnet.or.jp> wrote in message
news:#igSt8F5BHA.1900@tkmsftngp02...
Toshi
keep-aliveの線はなさそうですね。
WinCEの古い実装ではHTTP/1.1をサポートして
いなくて、これに引っかかっていたようですが...。
HTTPセッションが本当に正常に行われて
いるかどうかネットワークモニタで確認して
みたいところですね。
WWWサーバーには何を使っていますか?
> WWWサーバーには何を使っていますか?
どこを見に行っているということでしょうか。
YahooやLycosで投資情報を集めに行っています。
http://chart.yahoo.co.jp/t?c=2001&a=4&b=9&f=2002&d=4&e=17&g=w&s=7731.t&y=0&z
=7731.t
http://money.lycos.co.jp/stocks/research.html?u0=7731
> HTTPセッションが本当に正常に行われて
> いるかどうかネットワークモニタで確認して
> みたいところですね。
まだ通信に関しては、全くの初心者ですので、まともな理解能力がないので、今の状
態
では問題解決は大変だと思います。知り合いからhttp://www.nakka.com/のNAKKAさん
のサイトでAPIsocketを使ったプログラムのソースを紹介していることを教えてもら
いまし
た。これ以上植田さんにお付き合い頂くのも心苦しいですし、また勉強にもなります
ので、
今のCinternetクラスはあきらめて、APIsocketを使ったプログラムに変更しようかと
思っ
ています。
Toshi
Toshi wrote:
> > WWWサーバーには何を使っていますか?
> どこを見に行っているということでしょうか。
> YahooやLycosで投資情報を集めに行っています。
まさかとは思いますが、DoS攻撃と間違われているとか...。
Toshi wrote:
> これ以上植田さんにお付き合い頂くのも心苦しいですし、
ちゃんとマナーを守って投稿していれば、私でなくても
誰かがフォローしてくれますよ。きっと^^)
Toshi wrote in <umTFdq54BHA.1864@tkmsftngp07>
> プログラムの流れは以下のとおりです。
タイムアウトが設定されていないようですので、相手が途中で黙
りを決め込むと止まってしまうと思います。
CInternetSession *pSession = new CInternetSession(_T("http sample"));
pSession->SetOption( INTERNET_OPTION_CONNECT_TIMEOUT, 30*1000 );
pSession->SetOption( INTERNET_OPTION_RECEIVE_TIMEOUT, 30*1000 );
pSession->SetOption( INTERNET_OPTION_SEND_TIMEOUT , 30*1000 );
としてみてください。
# 30*1000 は 30 秒 です。
=== Nihon Application Co.,LTD. 木屋 善夫 ki...@nac.co.jp ===
木屋さん。ありがとうございます。INTERNET_OPTION_CONNECT_TIMEOUTについては
やってみていたのですが、RECEIVE_とSENDは未実施でした。早速適用したらOKにな
りました。ただし後日談があります。。。。。。。。
念のため、タイムアウトオプションを元に戻して(外して)チェックしたところ、何
とあれだ
け途中でフリーズしていたのが、あっさりOKになってしまいました。本当に馬鹿に
して
います。おそらくたまたまと思うので、チェックしておきます。
これで問題なければヒャッホーです。ありがとう。
Toshi
Yoshio Kiya <ki...@nac.co.jp> wrote in message
news:20020418094946.2...@nac.co.jp...
> Toshiさん、こんにちは木屋です。
>
> Toshi wrote in <umTFdq54BHA.1864@tkmsftngp07>
> > プログラムの流れは以下のとおりです。
>
>
> タイムアウトが設定されていないようですので、相手が途中で黙
> りを決め込むと止まってしまうと思います。
> CInternetSession *pSession = new CInternetSession(_T("http sample"));
> pSession->SetOption( INTERNET_OPTION_CONNECT_TIMEOUT, 30*1000 );
> pSession->SetOption( INTERNET_OPTION_RECEIVE_TIMEOUT, 30*1000 );
> pSession->SetOption( INTERNET_OPTION_SEND_TIMEOUT , 30*1000 );
> としてみてください。
との木屋さんのアドバイスでOKになりそうですが、一つだけ気になることが
あります。
SessionKeepAlive = milliseconds を設定してもいけるのではないでしょうか?
MSのサイトをみているとNetBT(NetBios over TCP/IP) ではSessionKeepAlive
と書いてあるので、ひょっとしたらCInternetSessionはSessionKeepAliveを設定
したらよかったのではと思うのですがどうでしょうか。
実験すればわかるのはずですが、実験の再現性が不確かな点あるので結論
はすぐには出ないので。わかる方おられればご教示ください。
Toshi