winsockのレスポンスが返ってきません

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
kobo

winsockのレスポンスが返ってきません

#1 投稿記事 by kobo »

たまに質問させていただいている初心者のkoboです。
winsockとはなんぞやと思い、サンプルコードを探してやってみました。
サンプルコードをそのままコピーアンドペーストすると、ちゃんと動いて
凄いなぁと関心しておりました。
(FTPサーバー?よりTXTファイルをダウンロードするコードです)
では、実験と思い、自分の使っているHPの一部にTXTファイルをアップデートしておいて
サンプルコードの、FTPサーバーの指定・ユーザー名・パス・ダウンロードのファイル指定と
思われる部分を書き換えて見ると、ダウンロードは成功しましたが
ソケットクローズの為(だと思う)に”QUIT”を送信した後のレスポンス受信で
止まってしまいました。
とくにエラーが出るわけでもなく、待っている感じでEXEは動いています。
前に記載されている部分と一緒のコードが書いてあるので、特別をしているとは思えないので
”QUIT”を変えないといけないのかなと思っています。
ソケットで使用するコマンドは、サーバーによって違うのでしょうか?
それらは何を勉強すれば分かるのでしょうか?
今回、実験で使ってみたのはYahooのジオシティーズというところです。
使用させて頂いたサンプルコードは、situmon様の
http://www.activebasic.com/forum/viewto ... light=recv
を使用させていただきました。

なぜ、レスポンスが返ってこないのでしょうか?
ゲスト

#2 投稿記事 by ゲスト »

うまく動作するコードを見ても、問題点を指摘できませんょ。
こういう場合は、自分でFTPサーバを立てて、FTPサーバのログとLANアナライザ
を比較しながらデバッグを行う物です。
プロパイダのFTPサーバで試すと、多くの人に迷惑が掛かる可能性がありますょ。

おそらく、エラー処理に問題が有る気がしますが・・・
kobo

#3 投稿記事 by kobo »

多くの人に迷惑が掛かるとの事、これはダメですね。
上手く行くコードを見てもそれは指摘できないですね。
LANアナライザーとはなんでしょう。
解らない言葉ばかりです。
自分でFTPサーバーを立てるなども初心者故にできません。
なので、いつの日か玄人になったらまたチャレンジしてみます。
ご指摘ありがとうございました。
situmon
記事: 35
登録日時: 2005年5月31日(火) 09:39
お住まい: 岐阜

#4 投稿記事 by situmon »

久しぶりの投稿です。

書き込みを見る限り、何年か前に私の投稿したFTPサンプルのコードの
お話のようなので返信させていただきます。

余り時間が取れないので、コードの詳しい説明とかは省きますが、
一応コードを修正しておきました。

原因は、”TYPE A”コマンドを送った後のレスポンス受信をなぜか2回行っていた
ためだと思われます。

一応、Microsoftのサーバで正常な動作を確認しましたので、一度
ご確認ください。

なお、私の使ったABは4.24なので、違うバージョンでの動作は
試していませんのであしからず。

それにしても、昔の自分のコードは見難い・・・・・
kobo

#5 投稿記事 by kobo »

situmon様 小生の様な初心者に返信までありがとうございます。
皆様に迷惑が掛かるといけないので、当方で実験はできませんが
一先ず、理解できる日を夢みてファイルに保存させていただきました^^;

一応、前回の実験結果です。詳細はメモ取りしてありますので所作だけお伝えしておきます。
1、最後の行にmsgbox 0,"finish","finish"を追記
2、各入力項目、FTPアドレス・ユーザー名・パスワード・カレントドライブ・ダウンロードファイルのタイプ・ダウンロードファイル名・保存名を書換えて実行
3、実行後、finishまで行かず、コマンド-7を表示した後、レスポンス-9が表示されなかったことより、その間にて停止しているだろう仮定。
4、各行間にmsgbox 0,"1","実行中"と連番で追記し何処で止まっているかを調査
コマンド-7後のレスポンス受信APILONG=recv(Sock,StrPtr(RBUF),Len(RBUF),0)にて停止していると思われる。
以上が、前回の記録です。
その後、有耶無耶になるのも気分が悪いので本を読み漁っていると、recvで反応待ちの場合、「サーバーの返答が空っぽだと永遠に待ち続ける」との一文を発見したので、これだったのかなぁ?と、自己納得に追い込んでおきました。
でも、別のトコだったのですね^^;;;
situmon様のコードは、未踏の部分で見ているだけで勉強になります。
分厚い本を片手に頑張って勉強しているので、winsockが使えるようになったら、また参考にさせて頂きたいと思います。ありがとうございました。
返信する