問題タブ [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 に答える
5654 参照

delphi - クライアントがIndyのサーバーに接続すると、IOHandler.ReadStreamがスレッドをブロックするのはなぜですか?

今日、Indy 10 (Delphi 2010 に同梱) を使用して奇妙な動作に直面しました。問題は次のとおりです。

クライアントに IdTcpClient があり、サーバー アプリに IdTcpServer があり、IdTcpServer の OnExecute イベント ハンドラーに次のコードがあるとします。

ここで、クライアントが TIdTcpClient.Connect を使用してサーバーに接続しようとすると、サーバー上で TIdTcpServer.OnExecute が呼び出され、実行が AContext.Connection.IOHandler.ReadStream(AStream) 行に到達すると、OnExecute イベント ハンドラ内で実行されているスレッドがブロックされます。

コードをトレースすると、ReadLongInt が ReadStream 内で呼び出されてバイト数を取得するときに問題が発生します。ReadLongInt は ReadBytes を呼び出します。ReadBytes 内では、FInputBuffer.Size はゼロです。そこで、ループ内で ReadFromSource が呼び出され、最終的に実行は TIdSocketListWindows.FDSelect に到達し、WinSock2 から「select」関数を呼び出します。実行はここで停止し、そのクライアント接続からは何も受信されません。AByteCount および AReadUntilDisconnect パラメータにも値を指定してみましたが、動作は変わりませんでした。

ReadStream を ReadLn に置き換えると、サーバーに接続してもコードの実行はブロックされず、クライアントから送信されたデータはサーバーによって読み取られます。

コードに何か問題がありますか?それともこれはバグですか?

よろしく

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

delphi - ネットワークドロップとIndyIdTCPServerに対処する方法

IdTCPServerコンポーネントを使用してクライアント/サーバーアプリケーションを作成しました。クライアントは、アプリケーションの存続期間を通じて接続し、永続的な接続を維持します。ネットワーク接続が切断された場合(クライアントがワイヤレスエアカードに接続しているために非常に頻繁に発生します)、クライアントは自動的に再接続します。これはすべて正常に機能します。

私の問題は、失われた接続に対応するサーバー上のソケットを処理することです。彼らはネットワークのドロップを検出せず、自分自身を切断します。いくつかの関連記事を読んだ後、接続が切断されたかどうかをサーバーが知る方法がないことを学びました。これを見つけるには、何らかのイベントを待つ必要があります。

だから私の質問は、接続が切断されたソケットを定期的に「処理」するためのメカニズムをサーバーに組み込む必要があるかどうかです。もしそうなら、どのように?1つの方法は、すべての接続を循環してデータを送信することだと思いました。これにより、必要な「イベント」がトリガーされることがわかりました。

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

delphi - ステートレス HTTP セッションでの進行状況のフィードバック

リモート メソッドを実行するには、ステートレス サーバーをプログラムする必要があります。クライアントは、JSON パラメーターを指定した REST を使用して、メソッド名とそのパラメーターを渡します。結果を処理した後、セッションは閉じられます。プロトコルとして Indy10、TCP/IP を使用する必要があるため、IdHTTPServer の使用を検討します。

大規模な結果セットは、Indy10 によってチャンク化され、分割してクライアントに送信されます。

私の問題は今です:

サーバー上のメソッドは、結果を生成するのに時間がかかる場合、進捗情報を提供します。これらは短いメッセージです。クライアントに返信するにはどうすればよいですか?

これまでwriteflushサーバーで使用してきましたが、クライアントはリクエストが終了するのを待ってから、進行状況情報を含む完全な結果セットを返しました。クライアントでそのような進行状況情報を表示/処理しながら、同じ要求でさらにデータを受信するために接続を開いたままにするにはどうすればよいですか?

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

multithreading - tidtcpserver.activeのデッドロック=false(Delphi2007 / indy10)

現在会社を辞めた開発者によって書かれたコードに問題があります。このコードは、XMLベースのプロトコルに応答するtcpserverを実装しています。これは、テスト環境では完全に正常に機能しているように見えますが、1人または2人のお客様がアプリケーションのシャットダウンに問題を抱えています。

これを、tidtcpserver.active=falseが呼び出されたときにデッドロックのように見えるものまで追跡しました。デッドロックは、メインスレッドが接続スレッドの終了を待機しているときに、接続トレッドの1つがメインスレッドに同期呼び出しを行うことによって発生する可能性があることをすでに認識しています。

私はすでにtidthreadsafestringlistを使用してデータをメインスレッドに渡して処理しています。メインスレッドからプロシージャを呼び出す必要がある場合は、これを行うためにtidnotifyの子孫を作成しました。誰もが探すべき何か他のものを考えることができます。


私はすでに例外処理をチェックしていましたが、

これは私がonexecuteイベントで持っているものです

終わり;


これが私がTS-stringlistをどのように使用しているかです

宣言。

コンストラクタで作成され、デストラクタで破棄されます。

これは、tcpserverのコンテキストで追加する方法です。

そして、これは私がメインアプリケーションスレッドのコンテキストでそれから読んでいる方法です

これが正しい使い方だと思いますが、コメントをお待ちしております。

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

delphi - tIdHttpServer - POST への返信を送信する前に EidConnClosed

Delphi 2007 で indy 10 を使用して HTTP サーバーを実装する際に問題が発生しています。

CommandGet イベントの単純なイベント ハンドラーをセットアップしました。

GET メソッドを使用して送信されたデータに返信する場合、params を解析して問題なく XML データを返すことができます。(以下のコードを参照)

POST を使用して送信されたデータに返信しようとすると、応答が indy によって送信されることはありません。代わりに、CheckForDisconnect(True, True) 行から TIdIOHandler.WriteDirect によって EidConnClosedGracefully が発生します。受信した POST データを処理する方法は次のとおりです

Wireshark を使用して何が起こっているかを確認しましたが、応答が送信される前に indy が ACK を送り返し、クライアントが切断されているようです。

これをテストするために、PHP で Apache をセットアップし、PHP スクリプトを作成して同じジョブを実行すると、すべて正常に動作します。違いは、POST データが ACK ではなく応答コンテンツで返信されることです。

これを解決する方法についての提案があるので、POST データと GET に応答します。


このwiresharkトレース(画像のリンクをクリック)からわかるように、タイムアウトを20秒に増やしました。まだ機能していません。もう少し調査してみます。そして、私が見つけることができるものを見てください。インディは、切断が発生する前に切断が発生したと考えているようです

画像はこちら

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

delphi - Dephi 2007 のより良いインディ

Delphi 2007 に付属しているデフォルトの indy10 を使用するのと、最新のスナップショット バージョンにアップグレードするのとでは、どちらが優れていますか?その理由は?

ありがとうございました

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

delphi - Delphi Indy10: IdTCPClient がサーバーの応答を取得する方法、および応答の長さが不明

ホスト:127.00.0.1; ポート:5001; 読み取りタイムアウト:3000;

タイムアウトすると、他の操作の一部は実行されません。コードを続けるためのアイデアはありますか?ありがとう。

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

delphi - Indy 10 を使用した Delphi

私は Delphi 4 を使用しており、Indy コード (Pv4 および Pv6) が乱雑にならないように、標準のノンブロッキング ソケットを作成したいと考えています。そして、コンピューターのIPアドレスを取得し、pingを実行できるようにしたいのですが、これを行った人は誰でもいます。Indy 10またはIndy 9で実行できますか。また、これらのことを実行するコードを作成し、テストしてください。

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

delphi - TwitterOAUTHとWin32EXEデスクトップアプリケーション

Delphi EXE(win32デスクトップアプリ)に対してコーディングして、Twitterにアクセスし、特定の機能を実行しています。以前は、API制限付きの基本認証を使用していました。これをOAuthに変換する必要があることはわかっています。私は最良のアプローチを決定しようとしてドキュメントを読んでいます。最良の方法は、コールバックURLを使用するWebブラウザーであることを理解しています。Twitterにはピンベース(oob)認証方式が含まれていることも知っています。これがこのアプリケーションを使用するためのルートだと思いましたが、シームレスではないので確認したいと思います。ユーザーはアプリケーションの外部に移動してピン番号を取得する必要があります。また、返されたアクセストークンが期限切れになることはないため、安全性も低くなります。

Indyv10コンポーネントを使用してGET/POST操作を実行しているので、それらを使用してコールバックを実行でき、Pin認証方式を使用しない方法があるかどうか疑問に思っています。

誰か助けてもらえますか?

また、ChuckBeasleyのTwitterクラスをDelphi7のIndyv10で動作させようとしていて、問題が発生しています。IdObjsとIdsysはもう存在しません。誰かがこのクラスを私のシナリオで動作させることができますか?ありがとう、デビッド

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

mysql - delphiアプリケーションを使用して誘導されたTroughtSSHトンネルが必要

Delphi2010アプリケーションを作成しました。信頼できるユーザーから信頼できないユーザーまで、この地域の多くの企業で使用されています。アプリケーションは、MD5暗号化パスワードの背後にあるMySQLでユーザーを認証します。これに続いて、アプリケーションはftpで取得した多くのファイルをアップロードおよびダウンロードする必要があります。

実際のところ、ネットワークスニファ(EtherealはWireSharkとも呼ばれます)は、アプリケーションのftp部分からプレーンユーザーとパスワードを取得できます。暗号化されたパスワードも取得でき、誰でもftpアプリケーションを使用してサーバーにログインし、不快なことをする可能性があります。

[TindyFTP]は、FTP接続自体を管理するために使用されます。このオブジェクトは、私が考えたSFTPをサポートしていないものであり、これで問題が解決する可能性があります。

DEVARTの[tMyMac]は、MYSQL接続を管理するために使用されます。

今の私のポイントは何ですか:SSHトンネリングを使用して、アプリケーションへの両方(ftpとmysql)のトランザクションタイプのIOハンドラーを制御するのに良い方法ですか?MyDACコンポーネントおよびTIndyと互換性のあるDEVARTのSecureBridgeを使用して、現在いくつかのテストを行っています。

SSHトンネルに接続し、mysqlとftpでそれを追跡する必要がありますか?SSHトンネルの使用中にftpパスワードも暗号化する必要がありますか?MySQLの部分では、WireSharkでパスワードを傍受しようとすると、パスワードが暗号化または難読化されているように見えます。

99%完了した私のプログラムのすべての構造を変更せずに、その時点からあなたのアイデアを知らせてくれてありがとう:)

ありがとう、ジョナサン