問題タブ [indy]
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.
delphi - D2009 exe が ATTnnnnn.DAT という名前の添付ファイルを含む電子メールを生成するのはなぜですか
D2007 でコンパイルされた同じソース コードが元のファイル名で正しく名前が付けられた添付ファイル付きの電子メールを生成するのに、D2009 exe が ATTnnnnn.DAT という名前の添付ファイル付きの電子メールを生成するのはなぜですか?
D2007 と D2009 に付属のそれぞれの Indy ライブラリを使用しています。添付ファイルに元のファイル名がない場合、ユーザーは添付ファイルをダブルクリックして開くことができません (通常、添付ファイルは Excel スプレッドシートです)。
注: コードは同一です。コンパイラと Indy ライブラリのみが異なります。D2009 exe によって送信された添付ファイルを保存して、名前を zzzz.xls に変更すると、正しく開くことができます。つまり、メールと添付ファイルは正しく処理されます。メールの添付ファイル名が間違っているだけです。
誰かが、添付ファイルのヘッダーが壊れていると示唆しました。インディは壊れた?再現するコードは、多くの Web サイトで見られる標準的なコードですが、必要に応じて投稿できます。事前にthx。
delphi - Indy 10 が初期化できないのはなぜですか?
Delphi 2009 プロジェクトに問題があります。Indy 10 を初期化できません。このコードは、以前は Delphi 2007 で問題なく動作していました (ただし、古いリビジョンの Indy を使用していた可能性がありますが、それとはあまり関係がないと思われます)。
IdWinsock2.InitializeWinSock() への最初の呼び出しで、次の例外が発生します (エラー コード 998)。
しかし、ws2_32.dll は C:\Windows\System32 にあります。バージョンの詳細は次のとおりです。
(これは、私がWinXPを使用していることを示しています)。
ばかげたことは、(「プロセス エクスプローラー」を使用して) プロセス自体を見ると、プロセスが既にこの DLL を開いていることがわかります。「WS2_32.DLL」が既にロードされているのは、このプロジェクトでも RTL ユニット Winsock.pas を使用しているためと思われます。このユニットは、WS2_32.DLL に依存する「wsock32.dll」に静的にリンクされているので、そこにあります。
このコードが以前 (Delphi 2007) で正常に動作し、現在 (Delphi 2009) で突然壊れた理由を知っている人はいますか?
そして、ws2_32 dll の一般的な知識を再び開くことができないのですか、それとも本当に何か問題があるのでしょうか? (私はチェックしました:私のシステムにはこれらのDLLのバージョンが1つしかありません)。
さらに良いこと:これを修正するのを手伝ってくれる人はいますか?
delphi - Delphi 2009 の Indy 10 のデフォルト インストールを更新する適切な方法は何ですか?
Indy は Delphi 2009 のインストール プロセスに組み込まれているため、SVN リポジトリから最新のものにアップグレードできるように、Indy を「削除」する適切な方法はありますか? 私の知る限り、それを自動的に削除するオプションはありません。
delphi - Indy 9 が Delphi 2009 に含まれているのはなぜですか? 安全に使用できますか?
Indy9 フォルダがあるのはなぜですか (C:\Program Files\CodeGear\RAD Studio\6.0\source\Indy のデフォルトのインストール フォルダには、「Indy9」と「Indy10」のサブディレクトリが含まれています) なぜ両方のバージョンがインストールされるのですか? Indy9 を使用しているのは何ですか? 2009 用に更新されているとは思いませんでした... Indy9 は Delphi 2009 で安全に使用できますか?
delphi - UTF-8 または Unicode をサポートする Delphi SMTP コンポーネント
Delphi 2009 に同梱されている Indy 10 SMTP コンポーネントは、件名と本文で Unicode を適切にサポートしていないよう です。
誰かが良い代替案を知っていますか、またはこの問題を解決するために Indy10 に必要な変更を加えた人はいますか?
delphi - Delphi 2009、Indy 10、TIdTCPServer.OnExecute、InputBuffer 内のすべてのバイトを取得する方法
Delphi 2009 で提供されている Indy 10 をいじっていて、OnExecute が起動したときに IOHandler からすべてのデータを取得するのに問題があります...
AContext.Connection.IOHandler.InputBuffer.Size は信頼性が低く、多くの場合 0 を返しますが、次に OnExecute を実行すると正しいバイト数が取得されますが、それでは遅すぎます。
基本的に、すべてのデータを取得し、それを UTF8String ( Unicode 文字列ではない) に詰め込み、特別なマーカーを解析できるようにしたいと考えています。したがって、ヘッダーはなく、メッセージは可変長です。Indy 10 IOHandlers がこのためにセットアップされていないか、間違って使用しているようです。
特定のサイズのバッファを渡し、可能な限りいっぱいにして、実際にいっぱいになったバイト数を返し、それ以上ある場合は続行するなどのことを行うとよいでしょう。
余談ですが、TIdSchedulerOfFiber のステータスはどうなっているのでしょうか。これは非常に興味深いようですが、機能しますか? 誰かがそれを使用していますか?ただし、Delphi 2009 の標準インストールには含まれていません。
更新: Msg := AContext.Connection.IOHandler.ReadLn(#0, enUTF8); が見つかりました。これは機能しますが、上記の質問に対する答えを知りたいのですが、IO のブロックに基づいているためですか? これにより、この TIdSchedulerOfFiber がさらに熱心になります。
multithreading - Indy 10 IdTCPClient別のスレッドを使用してデータを読み込んでいますか?
質問:私が探しているのは、Indy 10 で IdTCPClient を使用して別のスレッドを使用してデータを受信する最も一般的またはベスト プラクティスの方法です。
背景:以下のコードは、わかりやすくするために実際のデータ処理部分を取り除いたサンプルです。スレッドのアイデアは、すべてのデータ (残りのメッセージ長を宣言するヘッダーを持つ可変サイズ) を受信し、それを解析して (HandleData プロシージャが行うことです)、コマンドに応じてイベント ハンドラーをトリガーすることです。
TIdIOHandlerSocket は、必要に応じてソケットにデータを書き込むメイン アプリケーションによってスレッドに渡されます。
プレフィックスとして、Indy のサーバー コンポーネントを扱う別の StackOverflow の質問を使用しました。「Delphi 2009、Indy 10、TIdTCPServer.OnExecute、InputBuffer 内のすべてのバイトを取得する方法」を使用して、これまでの内容の基礎を取得しました。 .
助けてくれてありがとう!
delphi - Indy を使用したネットワーク トラフィックの測定
クライアント アプリケーションとのすべての通信を処理するために TIdTCPCmdServer を使用しています。サーバーで、ネットワーク トラフィックを含むあらゆる種類のログを記録したいと考えています。TCPCmdServer が実際に送受信したバイト数を確認する簡単で巧妙な方法はありますか? みたいなコードしか思いつかない
私の意見では、これらのトラフィックの更新はコード全体に分散され、かなり複雑であるため、これは非常に醜いです。
助言がありますか?
ご協力いただきありがとうございます。
multithreading - リスナー スレッドの優先度を変更する方法
Indy 10 の TIdCmdTCPServer コンポーネントを使用して、クライアント サーバー アプリケーションを実現します。問題は、クライアントからの要求がかなり複雑になる可能性があり、サーバー アプリケーションの GUI 部分がすぐに応答性を失うことです。Indy Documentationから、そのIndyを入手しました。
スレッド優先度 tpHighest を使用して、Binding のリスナー スレッドを作成して開始します。
その行動を変えることはできますか?
delphi - Indy Write Buffering / 効率的な TCP 通信
私はたくさんの質問をしています...しかし、新しいDelphi開発者として、私はこれらすべての質問に落ち続けています:)
これは、indy 10 を使用した TCP 通信を扱います。通信を効率化するために、クライアント操作要求を 1 バイトとしてコーディングします (ほとんどのシナリオでは、もちろん他のデータ バイトが続きますが、この場合は 1 バイトのみです)。問題はそれです
そのバイトをすぐには送信しません (少なくともサーバーの実行ハンドラは呼び出されません)。たとえば、「1」を「9」に変更すると、すべて正常に動作します。Indy が送信バイトをバッファリングすると想定し、書き込みバッファリングを無効にしようとしました
しかし、それは役に立ちませんでした。1 バイトを送信して、それがすぐに送信されるようにするにはどうすればよいですか? そして - ここにもう 1 つ小さな質問を追加します - indy を使用して整数を送信する最良の方法は何ですか? 残念ながら、 TIdTCPServer の IOHandler に WriteInteger のような関数が見つかりません...そして
私にはあまり効率的ではないようです。複数の書き込みコマンドを続けて使用するか、バイト配列にまとめて一度送信するかに違いはありますか?
回答ありがとうございます。
編集: 読み取りと書き込みの手順に関して大きな変更があるように見えるので、Indy 10 を使用しているというヒントを追加しました。