トップページ⇒tech
982コメント291KB

【Delphi】 Indyコンポーネント 【C++Builder】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
The Indy Project
http://www.indyproject.org/

     ./\        /\
     /:::::::ヽ____/::::::::ヽ、
    / ::. _  .:::::::::::::  _::::ヽ_
  / / °ヽ_ヽv /:/ °ヽ::::::ヽ
 / /.( ̄( ̄__丶 ..( ̄(\  ::::|     ぐぐってもわかんないよ〜
. | .:::::::: )  )/ / tーーー|ヽ)  ) .::::: ::|
. | .::::...(  (..||.    | (  (    ::|     だれかたすけて〜
. | :::.  )  )| |⊂ニヽ .| ! )  )   ::::|
 | :  (  ( | |  |:::T::::.| (  (    ::|
 \:  )  )ト--^^^^^┤ )  )   丿
  / (  (        (  .(   \
/  .、.)  )       /  \  _ \

INDY TIPS
http://monazilla.org/document/indytips.html

DelWiki - Indy
http://onigiri.s3.xrea.com:8080/delphi/index.php?Indy

Indy 日本語ヘルプ
http://www.borland.co.jp/delphi/del7docup.html
0175デフォルトの名無しさん05/02/24 08:44:50
C++Builderへのインストール方法を教えてください
017616905/02/24 09:59:51
何でも知ってまつね>>174

ヘルプみると、「Hypertext Transfer Protocol 仕様に基づいて,サーバーのリスニングスレッドのデフォルトポート番号」とありますね。
だから、仕様の名称そのまま取って、Default Portってことなんかなぁ。

色んな種類のサーバーアプリを作ってみようかと思うんですが、
業務毎にポート変えるってのはどうなんでしょ。
TCP/IP的には利用内容毎にポートを変えるということですが、
HTTPはポート80で固定して、参照アドレスでアプリ切り替えようかなぁ。
0177デフォルトの名無しさん05/02/24 16:05:14
>>176
おまいが知らなさ杉の気もするけど・・・。
0178デフォルトの名無しさん05/02/24 16:31:40
サーバーは固定、クライアントは自由、IP+ポートで十分識別可能
0179デフォルトの名無しさん05/02/24 17:09:48
>>175
ググれ!と言いたいけど、まとまった情報があまりないし、FAQになりつつあるな・・・
BCBスレ辺りにテンプレにしておいた方がいいかも。一応、まとめたから添削よろしく。

まず、Indy10は今のところBCBをサポートしていない。あと、BCB6とIndy9が前提。

1.一度、BCBをアンインストールしてから、再インストール。
そのときに、完全インストールではなく、Indyは除外してインストールすること。もちろん、Update4を当てるのも忘れずに。
(BCBのインストーラーを起動してIndyだけ削除してもいいけど、トラブルの可能性あり。再インストール推奨。)
2.アーカイブを適当なフォルダで展開。
3.Indy_9_00_xx_srcの下にあるFullc6.batを実行
4.展開したフォルダにC6というフォルダが出来るので、これをフォルダごと$(BCB)\lib\にコピー。コピーしたら、フォルダ名をC6でなく、Indy9とする。
5.BCBを起動する。[ファイル]−[すべて閉じる]を選択して、プロジェクトが何も開かれていない状態にする。
6.IDEの[コンポーネント]−[パッケージのインストール]を選択。「追加」をクリックして、$(BCB)\lib\Indy9\dclIndy60.bplを選択。
7.IDEの[ツール]−[環境オプション]から[ライブラリ]タブを選択。
8.ライブラリパスに$(BCB)\lib\Indy9\を追加。

内容は↓を参考にした。
ttp://deuxdeux.hp.infoseek.co.jp/gikobuild.html

あと、漏れの環境だと[プロジェクト]−[オプション]−[ディレクトリ/条件]の
インクルードパスにも$(BCB)\lib\Indy9\を追加しないとリンカエラーが起きる。
それも、Includeの優先度を$(BCB)\include\vclより高くし無いと駄目。
0180デフォルトの名無しさん05/02/24 17:36:47
>>176
手段と目的が入れ替わっているような気がする
Delphi+Indyでやらなあかんもんなのかしばらく自問自答しれ
0181デフォルトの名無しさん05/02/24 18:43:52
>>180
やらなあかん。
0182デフォルトの名無しさん05/02/25 08:09:36
>>181
じゃあ止めないw
>>176の件はhttpだというのならブラウザでアクセスするんだろうから
Clientのことを考えればポートを変えるのは得策でない
よって最終行の方法を推奨する
Bindingsプロパティの「...」押せばどうやればいいかわかるっしょ
0183デフォルトの名無しさん05/02/28 19:01:04
>>182
いや、実はhttpでありながらブラウザじゃないんだ。
Winと機器の通信みたいな。
HTTPだとどこでもライブラリ有りだし、ルータ越えしやすいし。
となると、ポートはやっぱ80しかダメか。
0184デフォルトの名無しさん05/03/01 08:25:25
>>183
ルータ越えしやすいってそれは違うだろという突っ込みはともかく
普通のhttp通信に紛れ込ませたいのであれば80しかないだろうな
0185デフォルトの名無しさん05/03/01 09:56:06
IndyのHTTPサーバーで作ったアプリが、
IPv6対応してるかどうか聞かれたら、
何と答えれば良いのでしょうか?
0186デフォルトの名無しさん05/03/01 10:01:43
してません
0187デフォルトの名無しさん05/03/01 10:03:17
Q「今後の対応はどうなりまつか?」
0188デフォルトの名無しさん05/03/03 11:17:11
POP3でサーバに残す設定で、一度読み込んだメッセージを再度読み込まないようにするにはどうしたらよいのでしょうか?
0189デフォルトの名無しさん05/03/03 15:06:34
>>188
MessageID憶えておけば?
0190デフォルトの名無しさん05/03/03 15:52:21
>>188
UIDLをつかう
0191デフォルトの名無しさん05/03/04 11:07:44
IndyのHTTPサーバーで、クライアントにBASIC 認証ダイアログを出させるには、どうしたら良いでつか?
0192デフォルトの名無しさん05/03/04 19:39:59
403を返せ
0193デフォルトの名無しさん05/03/04 23:18:02
401じゃなかった?
0194デフォルトの名無しさん05/03/08 08:57:11
サンプル無いんでつか?

その後認証ダイアログに入れられたユーザ、パスワードの取り方も知りたいし...
0195デフォルトの名無しさん05/03/09 07:48:52
>>194
サンプルは知らないけど、新月っていうP2PBBSのDelphi版で
IndyのTIdTCPServerを使ってBasic認証を使ってた。
この辺りを参考にしたらガリガリとならかけそう。スマートなやり方誰かキボンヌ
ttp://www.studyinghttp.net/auth
ttp://www.studyinghttp.net/rfc_ja/rfc2617.ja
ttp://www.ietf.org/rfc/rfc2617.txt

「WWW-Authenticate: Basic realm="hogehoge"」を含む
HTTP/1.0 401 Authorization Required を返すと
ブラウザがダイアログ出してパスワードとかが入れられて
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
とかでリクエストがもう一回来るから、Base64をデコードしたら userid:password ←コロンで区切ってある
が入っているらしい。

でいいかしら。
0196デフォルトの名無しさん05/03/09 15:42:01
>>194
uses に IdContext を手動で追加 (何故か自動では追加されないらしい)

procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
 if (ARequestInfo.AuthExists = True) and
   (ARequestInfo.AuthUsername = 'username') and
   (ArequestInfo.AuthPassword = 'password') then
 begin
  // Auth OK
  // AResponseInfo.ResponseNo := 200;
 end else
 begin
  // Auth NG
  // AResponseInfo.ResponseNo := 401;
  AResponseInfo.AuthRealm := 'input username and password'
 end;
end;

Indy10 しか使ったことないので、Indy9 ではどうなのか分かんないけど。
019719405/03/10 09:53:04
サンクスでつ>>195 >>196

これで出来そうです。
0198デフォルトの名無しさん05/03/10 15:44:08
>>196
ありがとう。
こんなプロパティあるのね。Indy9でもありました。
0199デフォルトの名無しさん05/03/12 05:09:02
Indyでsshを使ったプログラムは作れますか?
たとえば、sshでログインしてsftpでファイルの転送などはできるのでしょうか?
0200デフォルトの名無しさん05/03/12 14:45:34
>>199
ちょっと調べてみたら、Indy10 には IdSSH.pas という期待出来そうな名前のファイルが。
でも、中身は「作るとすればこんな感じかなぁ」という、要するに何も無い状態…。
つーことで今の所は自分で対応させる以外の方法はなさそうだね。
0201デフォルトの名無しさん05/03/13 21:39:50
>>53 の方法でSSL試してみたら、
繋がることは繋がるけど、すげぇ時間がかかるんだけど……
なんででしょうか?
なんかkeyかなんかの設定しないとダメなの?
ぐぐってもわかんないよ〜
020220105/03/13 21:45:26
ちなみに、WinXP Pro + Delphi7 Pro + Indy9(最新版)です。
環境かかなくてすいません。
0203デフォルトの名無しさん05/03/14 10:13:16
>>201
DNS 絡みの問題じゃないのかな。名前解決がうまくいってないとか。
どのくらいの時間がかかるのか具体的な秒数が分かればなんとなく原因も分かりそう。
020420105/03/15 06:20:50
特定のサイトで遅くなるみたいなんで、DNSがらみっぽいですね。
40秒ぐらいかかります。
0205デフォルトの名無しさん05/03/16 10:24:14
IdHL7.pas って何で塚?

もしかして、電子カルテのHL7プロトコル?
0206デフォルトの名無しさん05/03/16 22:10:27
>>205
Indyのヘルプより・・・

> TIdHL7 クラスは,HL7 Minimal Lower Layer Protocol を実装したものです。

0207デフォルトの名無しさん05/03/20 18:15:03
IdIPWatchを使うと、「グローバルIP」は所得できるんでしょうか?
またそうじゃないとしたら手段はあるのでしょうか?

他のソフトで所得しているのを見ると、不思議で不思議でしょうがないです。
ご存知の方、よろしくおねがいします。
0208デフォルトの名無しさん05/03/21 01:58:12
>>207
そのパソコンがGIPを持っていれば取得できる
0209デフォルトの名無しさん05/03/21 02:08:26
ここ半年、いつも取得と所得を間違えてるヤツがいるけど同一人物なんだろうか?
0210デフォルトの名無しさん2005/03/24(木) 20:48:12
最近知ったんですが、ICSというIndyに似たフリーのコンポ集があったんですね
http://www.overbyte.be/frame_index.html
このコンポの評判ってどうでしょうか?
0211デフォルトの名無しさん2005/03/24(木) 21:06:12
>>210
かちゅ〜しゃはそれらしい。
0212デフォルトの名無しさん2005/03/24(木) 23:44:54
(´-`)。o ○ (javascriptオフで見に行ったらな〜んにも表示されないページって、
正直どーなんだろう…)
0213デフォルトの名無しさん2005/03/28(月) 09:15:55
indy10をbcbにインストールすることはできますか?
0214デフォルトの名無しさん2005/03/31(木) 19:45:48
>>213
コンパイルとインストールは出来たけど、BCBはサポートされていないからなのか
実行時にエラーが出る。
それとも、やり方が間違ってるのかなあ?
0215デフォルトの名無しさん皇紀2665/04/01(金) 00:14:47
それはエラーによるんじゃないの?
「無理!」って出てるんなら、無理なんだろうしw
0216デフォルトの名無しさんNGNG
IdTCPServerとIdTCPClientを使ってLANで通信するプログラムを作っているのですが、
ポートを変更すると(Server、Clientとも同じ値)通信出来なくなってしまいます。
再起動すれば、新しく設定したポートで通信出来るのですが、
再起動しないでポートを変更し、通信することは出来ますか?
0217デフォルトの名無しさん2005/04/04(月) 18:44:13
TIdFTPコンポーネントなどでファイルをダウンロードする際、OnWorkイベントで
AWorkCount値でプログレスバーを変化させようとしても全く表示が更新されません。

LabelコンポーネントにAWorkCountを入れたときのみリアルタイムで表示が変化します。
後ろにRePaintを置いてもだめです。TIdAntiFreezeも置いています。
なにがまずいのでしょうか。
02182172005/04/04(月) 18:48:04
WorkBeginイベントでProgressBar.MaxにAWorkCountMaxはセットしています。
プログラム上はこれでいいと思っているのですが、他に何か入れるべき処理を
見落としているのでしょうか・・。
0219デフォルトの名無しさん2005/04/06(水) 00:54:03
217,218
ソース書いた方がイイかもしれませんよ。
AntiFreeze置くかわりに、イベントにApplication->ProcessMessages();
入れてもダメなら、TProgressBarの使い方に問題があると思います。
02202172005/04/07(木) 00:22:04
原因が分かりました。AWorkCountMaxが常に0だったようです。
Helpをよく読むと処理数が不明の場合は0が入るんですね。。
0221デフォルトの名無しさん2005/04/20(水) 11:42:35
IndyのHTTPサーバーのイベントハンドラで応答すれば良いことは分かりましたが、
cgiバイナリやisapi形式のDLLを実行したり出来待つか?
0222デフォルトの名無しさん2005/04/20(水) 22:42:16
安定性orバグの少なさという点から見ると、Indy8/9/10のどれが優秀ですか?
0223デフォルトの名無しさん2005/04/22(金) 01:03:17
メモリ共有でMLの過去ログをあさっていたら、吐駄ちゃんがTCPを使うと簡単とか
言って、中村タンとやり合っているのだが、どういうプログラムを書くのかがさっぱり
分からんです。

1つのフォームに、TCPサーバーとクライアントを貼り付けて起動すると、
2個目起動したときにエラーで立ち上がらない。
誰か教えて。
0224デフォルトの名無しさん2005/04/22(金) 04:19:04
複数のサーバープロセスが同じポートをbindしようとしてるだけだろ
0225デフォルトの名無しさん2005/04/22(金) 08:43:37
それは分かっていたんだが、それだと起動する毎にポート番号を変えて
通信する時に全ポート番号に送信するって事でしょ?
メモリ共有とどっちがお勧め?(メモリ共有の方法は分かりました。)
02262252005/04/22(金) 09:32:37
Indyのデモみてたらわかたよ。
どもね。
0227デフォルトの名無しさん2005/05/02(月) 03:33:49
オレの環境が悪いのか、オレ自体が悪いのか、
分からないけど、こんなに例外が出るんじゃ
配布出来ないなぁ。
オレは自分用だけに使ってるからいいけど。
どーなの?

ってことで保守。
0228デフォルトの名無しさん2005/05/05(木) 16:52:50
メールのUIDLの取得方法を教えてください
0229デフォルトの名無しさん2005/05/07(土) 05:25:53
>>227
正常に接続が終了したときも例外が投げられるけども、ちゃんと無視してる?
02302272005/05/07(土) 23:35:50
>>229
ん?
ちょっと話が見えない…。

オレが書いた例外ってのは、「メール受信時」の話。
説明が足りなかったか。
0231デフォルトの名無しさん2005/05/08(日) 01:15:34
>>230
> 説明が足りなかったか。
むしろ >>227 では何一つ説明してませんが。
02322272005/05/08(日) 01:32:29
>>231
まぁね。
保守がてらだし。
0233デフォルトの名無しさん2005/05/11(水) 13:59:45
メールのUIDLの取得方法を教えてください 
0234デフォルトの名無しさん2005/05/13(金) 10:21:40
QuickReportって、プリンタの用紙トレイを間違えたりとかしますよね。
回避方法教えて下さいでつ。
0235デフォルトの名無しさん2005/05/13(金) 11:28:12
raveにする
0236デフォルトの名無しさん2005/05/13(金) 11:41:35
(;゚д゚)rave・・・



( ゚∀゚)rape!!
0237デフォルトの名無しさん2005/05/13(金) 15:14:45
IdHTTP.Getで大きなファイルを落としている最中に中断する方法を教えてください。
0238デフォルトの名無しさん2005/05/13(金) 15:28:49
>>237
IdHTTP.Disconect;
02392382005/05/13(金) 15:31:29
あひゃ、間違えた…
× IdHTTP.Disconect;
○ IdHTTP.Disconnect;
0240デフォルトの名無しさん2005/05/13(金) 20:11:28
LANでつながってるPC(windows)に
受信プログラムをインストールしないで
ファイルのプッシュ配信を行いたいのですが
INDYでできますでしょうか?

0241デフォルトの名無しさん2005/05/13(金) 21:03:29
>>240
出来ます。
02422402005/05/13(金) 21:17:08
>>241
必要なコンポーネントととりあえずの
使用方法を教えてくれませんでしょうか?

親PC=hostAのc:\a.txtを
子PC=hostBのc:\に同名でコピーする場合。
0243デフォルトの名無しさん2005/05/13(金) 23:51:16
さあ、スタートアップフォルダにトロイをインストールする準備は出来たかい?
0244デフォルトの名無しさん2005/05/14(土) 02:59:50
>>242
x:ドライブで共有しているとして
CopyFile("c:\\a.txt","x:\\a.txt",false);
でうまくいくはず。(確認はしていません)

っていうか、これはindyの質問じゃないだろ?以後はC++Builderスレへ
0245デフォルトの名無しさん2005/05/14(土) 03:22:27
sftpを使ってlinuxのファイルを取得するにはどうしたらよいのでしょうか?
02462422005/05/14(土) 23:41:33
>>243
あいにくそういう用途ではありませんので。
社内業務に使うのです。イメージとしては
Nortonコーポレートエディションのクライアントへの
リモートインストールのように親PC主導の
プッシュ型でファイルを配信したいのです。

>>244
このやり方では、確かにINDY関係ありませんね(笑)
でもこれでは親が共有場所(X)を提供するまでは
できますが、ファイルコピー実行は子毎がやる必要がありますよね。
親からの命令で自動的に子に実行させる方法はWINDOWSのatコマンド
でタスクに登録したり、rexecコマンドで直接実行したりする方法が
ありますが、こういう方法しかないということでしょうか?
私はindy未使用のやり方を聞きたいのではなくindyでこういったこと
ができるかどうかが知りたいのです。

02472422005/05/14(土) 23:53:25
ttp://www.wackyfactory.net/domvw/
このソフトも電源切断コンソールをリモートで
クライアントに配布できるんだけど
こういったことをしたいんです。
(わかりにくくてすみません)
0248デフォルトの名無しさん2005/05/15(日) 02:11:36
>リモートで クライアントに配布できる

そんなことどこにも書いていないぞ
0249デフォルトの名無しさん2005/05/15(日) 03:02:01
根本的に勘違いしているような気がするな
0250デフォルトの名無しさん2005/05/15(日) 03:21:21
>>242
セキュリティの脆弱性をついてみるのが手っ取り早いと思います。
セキュリティパッチが最新のものまで当ててあると難しいかと思います。
OSの詳細なバージョンを教えてください。
02512422005/05/15(日) 10:02:28
>>248
「イメージとして」って書いてますが、逆にわかりづらかったでしょうか?
すみません。ファイル配布ができればokです。

>>250
子(クライアント)はwindows2000proとxpと混在です。セキュリティはアップデートで
重要な更新をパッチ済みレベルです。親も同様の環境での実現を希望しますが、
無理なら親だけserverですかね。

どちらにしてもindyコンポーネントで実現できないのであればスレ違いに
なりますので消えますが(241さんができるって即答だったもんで。。)
0252デフォルトの名無しさん2005/05/15(日) 10:07:04
>>251
できない。
indyを使わなくても出来ない。
あきらめろ。
02532422005/05/15(日) 10:08:07
>>252
わかりました。汚してすみませんでした。
0254デフォルトの名無しさん2005/05/15(日) 11:28:31
sshでログインしたいのですが、どのようにすればよいのでしょうか?
0255デフォルトの名無しさん2005/05/16(月) 15:11:15
Indy10のC++Builder6へのインストール方法を教えてください
0256デフォルトの名無しさん2005/05/16(月) 17:43:16
>>255
1.インストーラを実行する。
2.あとは画面の指示に従ってインストールを進めてください。
0257デフォルトの名無しさん2005/05/16(月) 23:21:32
>>256
インストーラが見つからないのですがどのファイルなのでしょうか?
0258デフォルトの名無しさん2005/05/16(月) 23:46:48
>>253

汚されたわ・・・・
0259デフォルトの名無しさん2005/05/17(火) 00:42:17
>>257
DLしたパッケージが間違ってるンジャマイカ
ttp://www.indyproject.org/download/Files/Indy10.iwp
の Automatic Install から入って見れ
0260デフォルトの名無しさん2005/05/17(火) 01:17:43
>>259
それをたどっていったのですが、C++Builderをクリックしていくと最終的にSource Codeダウンロードのページに戻ってしまいます。
C++Builder用Automatic Installファイルはどこにあるのでしょう?
0261デフォルトの名無しさん2005/05/17(火) 01:24:08
> No automated install is available. Please use the open source distributions.
無いってさ。
0262デフォルトの名無しさん2005/05/25(水) 00:22:34
Delphi6ProでIndy8と9を共存させる方法ありますか?
教えてくだされ
0263デフォルトの名無しさん2005/05/25(水) 21:47:56
>>262
1つのプロジェクトで8と9の両方使うようなことをしないなら、
プロジェクトごとにインクルードパスを変えたらいけそうだけど。
0264デフォルトの名無しさん2005/05/29(日) 08:21:23
>>179の通りにやってインストールはできたのですが、デバッガが使えなくなりました。
これは仕様ですか?
0265デフォルトの名無しさん2005/05/29(日) 09:49:44
一つ教えて欲しいです。
IdTCP接続で、ファイル転送したときは
レジューム可能でしょうか?
0266デフォルトの名無しさん2005/05/29(日) 09:57:51
不可能
0267age2005/05/29(日) 11:07:20
>>264
「デバッガが使えなく」って、どのような状況?
0268デフォルトの名無しさん2005/05/29(日) 11:23:18
>>267
デバッガオプションの統合開発環境を使うのチェックをはずさないと、コンパイルできなくなってしまいました。
これはたとえIndyを使っていないソフトをコンパイルしようとしても起こります。
0269デフォルトの名無しさん2005/05/29(日) 13:36:53
珍妙な。うちはならんぜよ。
0270age2005/05/29(日) 14:26:08
「コンパイルできなく」って、どのような状況?
0271デフォルトの名無しさん2005/06/21(火) 20:02:39
>>179氏を参考にIndy9のインスコまでは完了した。
んで、IdUDPClientを使おうと思います。

送信についてはSendBufferでおkというのはわかったのだが、
受信をするにはReceiveBufferしか見当たらない・・・
やっぱりこれってスレッドで回さないとあかんのでしょうか?

NMUDPみたくReceiveイベントがあれば楽なのに・・・orz
0272デフォルトの名無しさん2005/06/21(火) 20:48:46
>>271
うん。でもスレッドコンポーネントとか使えば楽なんじゃない?
02732712005/06/22(水) 09:59:41
>>272情報�dクス
スレッドコンポーネントっちゅーのは使ったことないんですが、
ttp://www.asahi-net.or.jp/~nk2w-ishr/progdtl.htm#KThdComp
これのことですか?
なんとなく使用方法はわかったと思います。
中身は普通のスレッドオブジェクトと同じっぽいですね。

で、もう一つ質問があるのですが、ひとまずスレッドではなくボタンイベントにて
ReceiveBufferを呼び出すようなサンプルを作り、受信しようとしたのですが、
受信してくれない様子でした。
引数の設定で解決するんかなぁ?って思っております。
晒そうと思ったが現在手元にナッシングですので後ほど晒します。
02742712005/06/22(水) 18:41:20
自己レス
なんとか動作できました。
IdUDPClientではなくIdUDPServerを使用したところ、
スレッドにしなくてもOnUDPReadイベントが実装されて
いたので、私の理想通りなことが出来ました。
ちなみに>>273で出来ないと言っていたのは、Bindingsに
ハンドルを指定しておりませんでした。
(その前はActiveがfalseのままで出来なかったり・・・もあった)

晒すとこんな感じ
static char buff[MAX_DATA];
void __fastcall TReadingForm::IdUDPServer1UDPRead(TObject *Sender,
TStream *AData, TIdSocketHandle *ABinding)
{
for(int i = 0; i < MAX_DATA; i++) buff[i] = '\0';

IdUDPServer1->ReceiveBuffer(buff, 8192, -1);
〜受信処理〜
}
ご協力ありがとうございましたm(。_。;)m
■ このスレッドは過去ログ倉庫に格納されています