問題タブ [indy10]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
12998 参照

delphi - SSLをサポートする単純なTIdHttpServerの例

誰かがSSLをサポートする簡単なTIdHttpServerの例を私に提供してくれることを願っています。Delphi2007とIndy10を使用します。サーバーとioHandlerを作成/セットアップするには、次のものがあります。

mycert.pemは、次のコマンドでopensslを使用して作成されました。

CertFile、KeyFile、RootCertFileに同じファイルを使用しているので、すぐに何か問題があると思います。

一般名を除いて、プロンプトに空白を入力しました。使用しているドメイン名に確実に設定したこと(仮にmyexample.comとしましょう)。

ブラウザでhttp://myexample.comにアクセスすると、例外が発生します。SSLとの接続の受け入れ中にエラーが発生しました。https://myexample.comを押すと、私のコードに到達することはありません。

1月30日注 -キーの生成にsslbuddyを使用しました。そして、これはまだ機能しませんでした。次に、次の行をコメントアウトしましたが、機能しました。

0 投票する
0 に答える
927 参照

delphi - Indy10 idSMTP を使用した予期しないポート番号 (Delphi / C++ Builder)

でメールを送信しようとしていますが、 portではなくIndy10port を使用したいようです。ポート 25 を許可するさまざまな SMTP サーバーでテストしましたが、次のメッセージしか表示されません。46525

SMTP サーバー (62.149.128.11: 465 ) に接続できません。接続エラー 10060。

これが私の簡単なコードです:

0 投票する
3 に答える
3590 参照

delphi - Indy 10 での双方向 TCP 通信?

TIdCmdTCPClient と TIdCmdTCPServer を使用しています。突然、私は双方向通信をしたいかもしれないことに気付きました。

何が一番いいでしょうか?おそらく他のコンポーネントを使用する必要がありますか?もしそうなら、どれ?または、「クライアント」に「サーバー」をポーリングさせて、何か通信したいかどうかを尋ねる必要がありますか?

これは非常に小さなシステムです。2 台のクライアントと 10 台のサーバーがあり、1 日に 1 回数分間、30 ~ 60 秒ごとに 1 回の転送がバーストするため、ポーリングのオーバーヘッドは重要ではありません。

「正しい」方法があれば、私はただ心配です。


更新: これは非常にシンプルなシステムです。トラフィックはほとんどなく、すべてがシンプルです。すべての送信は、オプションの単一パラメータである偶数型を示しています。

<event type> [ <parameter>] 例えば"HERE_IS_SOME_DATA 42"

これは両方向に送信できます。ここにホバーしても「返信」ではありません。メッセージを送信するだけですか (そして、メッセージが届くことを願っています)? データなしで Ack を受信しますか? 例外がキャッチされないということは、メッセージが正常に送信されたことを示しますか?)

2 つの TIdCmdTCPServer を使用することは可能でしょうか (やり過ぎでしょうか)。

0 投票する
1 に答える
499 参照

delphi - 開発時に接続が多すぎます

私は(このコミュニティからの多くの助けを借りて)私の最初のクライアント/サーバーアプリをまとめようとしています。

私はIndy10とDelphiXe2を使用していますが、私の問題はそれらにあるのではなく、soocketsの動作にあるのではないかと思います(私に言わせれば、奇妙で黒い芸術)。

Alt + F2を押して停止する前に、例外のブレークポイントにヒットし、コードをステップ実行することが多いため、次の実行では「接続済み」の例外が発生し、最終的に「接続が多すぎます」と表示されます。

どうすればこれを片付けることができますか?

(また、誰かがtry ...を使用するデモを持っていますか?ただし、indyデモのようにtry ...を最後に使用するよりもratehrを除きますか?)

0 投票する
2 に答える
1341 参照

delphi - なぜ idSMTP で送信されたメールが改行されないことがありますか?

TIdMessageと を使用してテキストのみのメールを送信していますTIdSMTP

Bodyような単純な連結文字列を使用します

とにかく、生成された電子メールでは、「#13#10」の一部が無視されません。変数をログに記録するBodyと、テキストが新しい行に移動することがわかりますが、メールではこれは起こりません。奇妙なことは、すべての行で発生するのではなく、一部の行でのみ発生することです。

なぜこれが起こるのか考えていますか?チェックする何かを提案できますか?#13#10状況によっては、 とテキスト メールの本文が競合する可能性はありますか?

アップデート

さらに調査した結果(コメントのおかげで)、Outlookの視覚化の問題であることに気付きましたが、とにかく問題はまだはっきりしていません。

これは NotePad++ で開かれた電子メールの本文です (私は Outlook から保存された msg ファイルを開きました)。改行も示しています (#13#10 は CR LF として表示されます。赤と緑で 2 つの改行を強調表示しています)。 Outlook では問題があります (ただし、NP++ では他のすべての改行と同じように見えることがわかります): NotePad++ のメール本文

Outlook の電子メールは次のようになります (Outlook では、メッセージに余分な改行があり、それらは削除されていると表示されますが、それらを元に戻すオプションが提供されていることに注意してください。 Outlook でのメールの表示が悪い]

そのオプションを選択すると、電子メールは問題ありません。 ここに画像の説明を入力

これが一部の改行でのみ発生する理由がわかりません。これは問題をよりよく理解するのに役立ちますか?

0 投票する
0 に答える
676 参照

delphi - 簡単なINDYデモを探す

基盤となるフレームワークを使用でき、二度と見る必要のないシンプルなクライアントサーバー通信が必要です。私は自分のアプリケーションに集中し、次のような単純な機能APIを使用したいと考えています。

  • サーバーが応答したかどうかを知る必要があります。もしそうなら、結果の文字列は何でしたか
  • SererがIndyCommandHandlerを使用した場合は便利ですが、受信した文字列を自分で解析できるため、重要ではありません。
  • また、「あると便利」であり、INDYデモがそれをカバーしていないように見える場合(報告によれば、私が見つけられないように見えるSMTPデモを除く)は、サーバーがクライアントとの通信を開始することです。そうでない場合は、クライアントにポーリングを依頼するか、サーバーに、追加する必要のあるクライアントのハートビートへの応答として通信を送信させることができます。

事前に1,000,000に感謝します。Indy10デモのURLまたは名前で十分です


更新:アプリがソケットについて何も知らないようにしたい(IPアドレスとポート番号を示す以外)。

接続があることを知りたくありません。接続が常に開いているか、各送信要求に接続されているかは言うまでもありません(また、常に開いている場合は、閉じたときに自動的に再開します)。せいぜい、「接続を開いたままにする」ことを示したい人にとってはブール値です。


更新の更新:この質問を閉じて別の質問を投稿し、言い換えるとわかりやすくなりますか?確かに、「データを別のPCに送信したいだけ」で、それがどのように行われるかを本当に気にしないのは私だけではありませんか?既存のフレームワークはありませんか?新しいプロジェクトをどのように始めますか?新しいアプリケーションを追加する「配管」を処理する単純なダミープロジェクトはありますか?そんなこと知ってる?

0 投票する
1 に答える
3802 参照

delphi - Delphi および Indy 10 TIdHTTP 経由で WebDAV コンテンツを取得する

Delphi ニュースグループを見ると、WebDAV サーバーからコンテンツを取得する最善の方法は、組み込みの TIdHTTP.Get を使用することです。これを行っている間、結果は HTML であり、これがディレクトリとファイルに関するデータを取得する最良の方法であることを確認したいだけです。もしそうなら、私はそれを解析しますが、ファイル/フォルダー情報だけを持っている可能性のあるよりクリーンな方法がないことを確認したいだけです...そしていいえ、今のところ私は探していませんこれには他のコンポーネントを使用します。

0 投票する
2 に答える
871 参照

delphi - dbxDataSnapユーザーセッションのメッセージループにフックする

dbxユーザーセッションのWndProcにフックする方法はありますか?

背景:dbx DataSnapは、TCP通信にIndyコンポーネントを使用します。最も単純な形式では、DataSnapサーバーは接続を受け入れるIndyTCPサーバーです。接続が確立されると、Indyはその接続のスレッドを作成し、その接続のすべての要求を処理します。

これらの各ユーザー接続はリソースを消費します。同時接続数が数百のサーバーの場合、これらのリソースは高額になる可能性があります。多くのリソースをプールすることができますが、必要になるたびにリソースを取得して解放する必要はありません。

代わりに、アイドルタイマーを実装したいと思います。スレッドがリソースで終了すると、タイマーが開始します。タイマーが経過する前にスレッドがリソースにアクセスした場合でも、リソースはそのスレッドに「割り当て」られます。ただし、次のアクセスの前にタイマーが経過すると、リソースは解放されてプールに戻されます。次回スレッドがリソースを必要とするとき、別のリソースがプールから取得されます。

私はこれを行う方法を見つけていません。SetTimerを使用してみましたが、タイマーコールバックが起動しません。これは、スレッドに対するIndyのWndProcがWM_TIMERをディスパッチしていないためだと思います。このスレッドの「実行ループ」を制御できないため、イベントが通知されたかどうかを簡単に確認できません。実際、スレッドがユーザーリクエストを処理していない限り、このスレッドのコードは実行されません。そして実際、私はコードをユーザーの要求の外で実行したいと思っています。

元の質問に対する解決策または代替アプローチの提案も同様に高く評価されます。

0 投票する
0 に答える
1546 参照

delphi - TIdFtp により、最初の実行時にのみ List out of bounds エラーが発生する

次のコード スニップに問題があります

プログラムを起動してから初めてこの関数を実行すると、 IdFtp.List コマンドで次のエラーが発生します

'List index out of bounds (1)' メッセージの EListError

しかし、2回目の実行ではエラーは発生しません

Delphi 2010 で Indy を最新バージョンのビルド 4734 にアップグレードしようとしましたが、成功しませんでした

エラー時の詳細情報コールスタックが表示されます

  • :7547b9bc KERNELBASE.RaiseException + 0x58
  • :0043652e TList.Get + $1A
  • :0043652e TList.Get + $1A
  • IdComponent.TIdComponent.EndWork(wmRead)
  • IdComponent.TIdComponent.EndWork(wmRead)
  • IdComponent.TIdComponent.EndWork(wmRead)
  • IdIOHandler.TIdIOHandler.ReadStream($229ADD0,-1,True)
  • IdFTP.TIdFTP.InternalGet('NLST REKIM- 0130 ',$229ADD0,False)
  • IdFTP.TIdFTP.List(nil,'REKIM- 0130 ',False)
  • IdFTP.TIdFTP.List('REKIM- 0130 ',False)
  • unitMainTntNavi.TfrmMain.FinnaSkrar('REKIM- 0130 ',$22BE730)

OnDirParseStart および OnRetrived Dir がトリガーされていない

IdFTP1.DirFormat 文字列は空です

最初に IdFTP1.RetrieveCurrentDir を呼び出しても解決しない

IdFTP1.List(nil) を呼び出しても同じ結果になります

0 投票する
2 に答える
5450 参照

delphi - Delphi XE2 Indy 10 TIdCmdTCPServer フリーズ アプリケーション

Delphi XE2 で Indy 10 コンポーネントを使用する方法を学び始めたところです。コマンドソケット(TIdCmdTCPServerおよびTIdCmdTCPClient)を使用するプロジェクトから始めました。すべての設定が完了し、クライアントはサーバーに接続しますが、クライアントが接続した後、サーバーがクライアントに送信するコマンドは、最終的にクラッシュして閉じるまでサーバー アプリをフリーズします (ディープ フリーズ後)。

プロジェクトのセットアップ

セットアップは非常に簡単です。小さなサーバー アプリと小さなクライアント アプリがあり、それぞれに対応する Indy コマンド tcp ソケット コンポーネントがあります。クライアントにはコマンド ハンドラーが 1 つしかありません。

サーバーアプリ

サーバーには、type TCli = class(TIdServerContext)パブリック プロパティを 1 つだけ含むコンテキスト用の非常に単純なラッパーがあります (継承は実質的に Indy の要件です)。

クライアント アプリ

一方、クライアントは問題なく動作します。サーバーからコマンドを受け取り、それを実行します。クライアントには、まだ接続されていない場合に自動接続するタイマーがあります。現在、アプリの起動から 1 秒後に接続を試行するように設定されており、まだ接続されていない場合は 10 秒ごとに試行を続けます。

問題の詳細

サーバーからクライアントに 1 つまたは 2 つのコマンドを正常に送信できます (クライアントは適切に応答します) が、コマンドを送信してから数秒後にサーバーがフリーズします。OnConnectサーバー上に、OnDisconnectOnContextCreated、およびのイベント ハンドラーがOnExceptionあります。実際に行うことは、ログを投稿するか、リスト ビューでオブジェクトの接続/切断を処理することだけです。

スクリーンショット

2 回のクリックでサーバー アプリがフリーズする

最後に、クライアント アプリが正常に閉じられると、サーバーも凍結状態から正常にスナップします。ただし、クライアントが強制的に閉じられると、サーバーも強制的に閉じられます。それが私が見ているパターンです。PostLog(const S: String)TMemo に短いメッセージを追加するだけのログオン イベントに投稿します。

私は2つのプロジェクトを実行しましたが、両方に問題がありました。サンプルプロジェクトを用意しました...

サーバー コード( uServer.pasおよびuServer.dfm )

クライアント コード( uClient.pasおよびuClient.dfm )