問題タブ [qlocalsocket]

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 投票する
2 に答える
1630 参照

qt - Qt4.5:app.execの前にイベントループベースのlocalsocketを使用する

Qtで実際的な問題に直面しています。QLocalSocketと別のプロセス(パイプ/ UNIXソケット)と通信するクラスを使用しています。他のイベントが発生する前、つまりapp.exec()が開始する前(より正確には、アプリが開始するとすぐに)にその通信を行う必要があります。 )。私が使用しているクラスにはイベントループが必要なので、イベントループが開始される前にクラスメソッドを呼び出すと機能しません。イベントループの準備ができたときに何かを開始する方法はありますか?非表示のイベント専用ウィンドウを作成し、非表示のウィンドウコンストラクターで職務を遂行し、このウィンドウをトップレベルとして確立することを考えました。

基本的に、このローカルソケット通信タスクは、イベントループが利用可能になったらすぐに開始する必要があります。

何か案は?

ありがとうございました。

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

qt - 永続的なQtローカルソケットIPC

ローカルサーバーとクライアントアプリケーション間でIPCを使用するアプリケーションを開発しています。Qtのドキュメントや例のように構成されているため、特に特別なことはありません。

問題は、クライアントがパケットを頻繁に送信し、サーバーのローカルソケット(NTではパイプと呼ばれる)からの接続/切断が非常に遅いことです。したがって、私が達成しようとしているのは、2つのアプリケーション間の「永続的な」接続です。

クライアントアプリケーションは、問題なくローカルサーバー(QLocalServer)に接続します。

また、従来のQt方式でもリクエストを送信します。

問題ない。ただし、このトリックはサーバー側のreadyRead()シグナルにあります。readyRead()処理スロットの現在の実装は次のとおりです。

ゼロに設定_blocksizeしないと、最初のブロックグループのみを受信できません(これはパイプを経由するため、ブロック全体がセグメンテーションなしで到着すると予想されますが、そうではありません)。_blocksizeは現在のストリームフローを表していないので、確かにその動作を期待しています。了解しました。_blocksizeをリセットするとうまくいきますが、ソケットのバイト配列を増やすことなく、クライアントから別のパケットを再送信することはできません。私が欲しいのは、ReadRequestでリクエストを処理し、関連するアプリケーションの接続/再接続に頼ることなく、次のデータブロックを受信することです。

たぶん私は着信データのレートを「調整」する必要がありますか?

どうもありがとうございます。

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

qt - 複数のクライアントを持つ QLocalServer -- 適切な処理

Qt 4.6で複数のクライアントからのリクエストを受け入れるために、1つのサーバー間でIPCを機能させようとしています。基になる名前付きパイプが閉じられていないことを除いて、すべてが機能しており、Qt が最大ハンドル到達メッセージ (62) を発行します。

複数のクライアント接続を受け入れたいので、QLocalServer クラスへの newConnections を次のように処理します。

新しい接続を取得するたびに、QLocalServer::nextPendingConnection() から受け取った QLocalSocket ポインターが上書きされるため、もちろん QLocalSocket クラスをカプセル化する SocketHandler クラスを介してデータ要求を管理します。

クラス宣言は次のとおりです。

上記のように、問題はクライアントの要求でサーバーから切断できないことです。QLocalSocket::close、QLocalSocket::disconnectFromServer を試してみましたが、うまくいきませんでした。

マルチスレッドソリューションを使用する必要がありますか? (問題は解決しないと思います。)

私が考えている別の解決策は、1:N を処理しようとする代わりに、1:1 QLocalServer<-->QLocalSocket IPC メカニズムを提供することです。

前もって感謝します。

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

qt - QIODevice* を期待するメソッドに QLocalSocket* を渡す

野心的すぎるかもしれませんが、QLocalSockets と QTcpSockets の両方で接続を受け入れることができるサーバー プログラムを作成しようとしています。概念は、新しい接続をリッスンする QLocalServer と QTcpServer の両方を持つ「nexus」オブジェクトを持つことです。

...そして、コンストラクターがQIODeviceへのポインターを取るサーバーオブジェクトを確立するスロットを分離します。理論的には、QLocalSocket と QTcpSocket の両方が QIODevice を継承しているため、これは機能するはずです。たとえば、newLocalConnection スロットは次のとおりです。

問題は、これがコンパイルされず、エラーが発生することです:

エラー C2664: 'CalculationServer::CalculationServer(QIODevice *,QObject *)': パラメーター 1 を 'QLocalSocket *' から 'QIODevice *' に変換できません 1> 指されている型は無関係です。変換には reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です

現在、指摘されているタイプは明らかに無関係ではありません。コードの他の場所では、次のようなアクションにまったく問題はありません。

...では、コンパイラがこれに問題を抱えている理由を誰か教えてもらえますか? コンストラクターに QLocalServer* を受け入れさせる方法はありますか? コンストラクターに void ポインターと追加の変数を渡して送信内容を伝える核オプションがあると思います。そのため、void ポインターを QLocalSocket または QTcpSocket のいずれかに再キャストできますが、reinterpret_cast に頼るのは不快に感じます。これは、C++ ポリモーフィズムの簡単なビットのはずです。

よろしく、

スティーブン。

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

php - PHPスクリプトからソケットへのバインドの問題

私はPHPに非常に慣れていないので、これは単純なことかもしれません。とにかく、私はPHPスクリプト(Webクライアントによってアクティブ化される)とローカルプロセス(C ++で記述される)の間の双方向通信を作成しようとしています。PHPスクリプトは、C ++プロセスに情報を送信してから、応答を待つ必要があります。私の問題は、この種の通信を設定する唯一の方法は、socket_bindを使用することであるように思われることですが、そうすると、「アドレスはすでに使用されています」というエラーで失敗します。問題のソケットファイル/tmp/ sockは、継続的に実行されているC ++プロセスによってすでに作成されています(PHPスクリプトでは起動できません)。socket_connectを使用して、C ++プロセスに何かを書き込むだけで、問題なく動作します。しかし、PHPスクリプトからそのソケットをリッスンする前に、バインドする必要があります。これが私のコードです:

ありがとう -

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

qt - QLocalSocket のエラーを出す方法

「ローカル フォーチュン サーバー」の例 (Qt 4.7.3 から) を Windows のサービスとして実装しています。私が望むのは、誰かがサービスを一時停止したときに、ローカル サーバーが接続されたローカル ソケット (ローカル フォーチュン クライアント) にエラーを通知することです。エラーは QLocalSocket::ServerNotFoundError である可能性があります。さて、サーバーの例からこのエラーを生成する方法。このエラーを生成したい次のコードを見てください。

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

qt - サーバーが管理者権限で実行されている場合、QLocalSocket::connectToServerがQLocalSocket::SocketAccessErrorで失敗しました(Windows 7)

Qt4.8.1のMicrosoftWindows7実装で次の問題が発生します。

QLocalServer(名前付きパイプ)はクライアントの接続を待機しており、管理者権限(システムサービスなど)で実行されるサーバーアプリケーションとして実行されています。

特権のないQLocalSocketクライアントがそのサーバーに接続できるようにするにはどうすればよいですか?接続の試行は常にエラーコード3(QLocalSocket :: SocketAccessError)で拒否されます。解決策はありますか?

編集:私が知ったように、解決策は「Everyone」Sidへのフルアクセスを許可することによってパイプのセキュリティを変更することです。ここでの唯一の問題は、への呼び出しがSetSecurityInfo常に「アクセス拒否」エラーで失敗することです。まず、パイプハンドルを取得する必要があります。パイプはすでにQtによって作成されているので、で開きますCreateNamedPipe

NewAclNULLに設定されている場合でも、呼び出しは失敗します。では、その「アクセス拒否」エラーの原因は何でしょうか。

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

c++ - QLocalSocketからQLocalServerへのメッセージが転送中に破損しています

私は同様の問題を見つけることができなかったので、ここに行きます:

QStringをQLocalSocketから2つのアプリケーションを介してQLocalServerに送信しています。受信(QLocalServer)アプリケーションはメッセージを受信しますが、エンコーディングが完全に間違っているようです。

QLocalSocket(クライアント)からQString = "x"を送信すると、QLocalServerに外部(中国語?)シンボルが表示されます。私のコードは文字通りNokiaDeveloperのWebサイトからコピーされています

QDebugを介してメッセージを印刷すると、「??」が表示されます。メッセージボックスで起動すると漢字が印刷されます。受信したメッセージをUTF-8、Latin1などに再エンコードしようとしましたが、うまくいきませんでした。

コードは次のとおりです。

どんな助けでも大歓迎です。

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

qt - qlocalserverを起動できません

私はIPCソリューションでQlocalsocketを使用しており、サーバーを起動してQLocalSocketクライアントからの接続を受け入れ、正常に通信できます。問題はありません。

しかし、サーバーのプロセスを強制終了すると問題が発生します。QLocalServerを同じ場所で再度リッスンさせることはできません。サービス名を変更して、サービスを再開できるようにする必要があります。これは、ランタイム環境では不可能でした。

では、その名前を解放するために前のプロセスを作成するにはどうすればよいですか?

これが私がサーバーを起動する方法です:

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

c++ - QLocalServer IPC クライアントは機能するが、サーバーは機能しない

わかりました、これはトリッキーに思えます。IPC を実行するために QLocalServer を実装しました。しかし、それは正しく動作しません。クライアントが接続し、接続されていることを伝えます。サーバー...まあ...そうではありません。これにより、メッセージを受信できなくなります。

サーバーの実装は次のようになります。

出力サーバー:

出力クライアント:

サーバーが実行されていない出力クライアント:

クライアントの接続中にサーバーを閉じた場合のクライアント出力:

したがって、クライアントは確実にサーバーに接続していますが、サーバーのnewConnection()シグナルが呼び出されることはありません。私も自分で接続を確認しようとしましたm_server->hasPendingConnections()...しかし、それもfalseを返します...

[編集]

サーバーのステータスを30秒ごとに確認します。

出力: