問題タブ [qtcpserver]

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 に答える
2495 参照

multithreading - 複数のスレッドで QTCPServer を使用するには?

複数のクライアントからのリクエストを同時に処理する Web サーバーを作成しようとしています。設計上、一度に処理できるリクエストは 1 つだけです。

必要なのは、接続を呼び出しnextPendingConnection()てから、処理のために別のスレッドにディスパッチする方法です。

これを行う方法はありますか?

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

c++ - QTcpServer が複数のアドレスを取得する

Qt-Framework のQTcpServerを C++ で使用しています。

で始めました

そこから住所を取得します。これは 0.0.0.0 です。私の意見では、複数のアドレス (127.0.0.1 や LAN アドレスなど) をリッスンする必要があります。

このクラスから複数のアドレスを取得する方法はありますか?

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

windows - QT QTcpServer telnet は文字を取ります \r\n

を書いていQTcpServerます。telnet.exeテスト用のクライアントとして使用しました。新しいクライアント接続時に、サーバーHi!がクライアントにメッセージを送信し、それが表示されます。これまでのところ、すべて問題ありません。

しかし、telnet.exeウィンドウに何かを入力すると、各文字readyRead()に対して a が出力されます。の後にのみ送信したい! どうしたの?それはWindowsの性質ですか?私のLinuxボックスで使用したことが原因で、予想どおり、の後に文字列のみが送信されます。\r\ntelnet.exetelnet\r\n

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

c++ - Qt-シンプルなエコーサーバー

Qtでは、QThreadPoolでスレッドをどのように存続させますか。私が見た限りでは、QRunnableを実行するオプションしかなく、その中のスレッドを制御することはできないと言われています。スレッドプールを使用して、ソケットを存続させ、読み取りと書き込みの準備を整えるにはどうすればよいですか?

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

qt - QTcpServer を動作させることができません (newConnection が呼び出されませんでした)

これと同様の質問が寄せられていることは知っていますが、問題を解決する答えが見つかりません。

私の会社が使用するプログラムにサーバー機能を追加するために、いくつかの既存の Qt コードを適応させています。そのために、QTcpServer オブジェクトを既存のダイアログに追加し、listen() を呼び出して、次のようにスロットを newConnection エミッターに接続します。

主なものは次のとおりです。

new_Connection() は呼び出されないため、関連性はわかりませんが、次のとおりです。

これは、プログラムが指定されたポートでリッスンを開始し、それに telnet で接続すると、ある種の接続が確立されるという点でうまく機能しますが、new_Connection() が呼び出されることはありません!

2005 年にさかのぼるこの問題に関する投稿を見たことがあるので、明らかに新しいことではありませんが、問題に対する満足のいく答え (または実際の答え) は見つかりませんでした。これは、Qt サーバー プログラムを書いた人でさえ、職場の全員を困惑させました。既存のフレームワークに根本的な問題があると推測していますが、それが何であるかはわかりません。

私はこれで1日半髪を引き裂いていました.成功に近づいたのは、実際にソケットを返すwaitForNewConnection()を使用することでしたが、readReady()エミッタに接続したとき、それは決してありませんでしたどちらかを解雇した。では、これらのシグナルが呼び出されないようにするにはどうすればよいでしょうか?

私の正気を惜しまないで、できる限り私を助けてください。

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

qt - QTcpServer - QTcpSocket 確認質問

-->QTcpSocket,QTcpServerを使ってプログラムを書いています。パケットが配信されることを保証するために、何らかのコード (つまり、確認手順) を追加する必要がありますか?
もしそうなら、ネット上ではそのようなものは見つけられなかったので、いくつか例を見てみたいと思います。

-->QTライブラリのどこかで、これらはすでにカバーされているので、そのようなものは必要ありませんか?

どんな助けでも大歓迎です。ありがとう。

編集:今、私は以下に追加した QDataStream のチャンクでヘッダーを使用する方法を尋ねています。どの部分が書き込まれているか、どの部分が欠落しているかを追跡できるように、すべてのチャンクに情報を伝えるヘッダーが必要です。以下をご覧ください。

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

c++ - リモート ホストの IP アドレス QTcpServer を取得する

Qtを使用して、QTcpServerを使用してTCPサーバーを作成しています。クライアントがサーバーに接続するたびに、リモート ホストの IP アドレスとポート番号を知りたいです。ドキュメントを検索してみましたが、このトピックに関する情報は見つかりませんでした。

私は方法があるはずだと知っていますが、私はそれを理解することができません。助けてください。

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

python - PyQt QTcpServer:複数のクライアントにデータを返す方法は?

2つ以上のクライアントに同時にデータを返すことができるPyQtを使用してQTcpServerを作成しようとしています。これにはスレッド化が必要になると思います。

threadedfortuneserver.pyの例をテストケースとして使用して(PyQt4に含まれていますが、私のシステムでは/ usr / share / doc / python-qt4-doc / examples / networkにあります)、複数のクライアントを接続したいと思います。クライアントのうちの1つが幸運を要求すると、他のクライアントも「クライアントXが幸運を受け取ったばかりです」のようなメッセージで更新されます。

fortuneserver / clientプログラムがどのように機能するかは理解していますが、幸運がクライアントに返送された後、クライアント接続はすぐに終了するようです。私の具体的な質問は次のとおりです。

  1. すべての接続を開いたままにして、クライアントの1つが財産を要求するたびに、他のクライアントを更新できるようにすることは可能ですか?

  2. もしそうなら、接続されたクライアントを追跡してループするための最良の方法は何ですか?

複数のクライアントが対話でき、各クライアントが他のクライアントのアクションについて更新できるアプリを開発したいので、これは私にとって深刻な障害です。

よろしくお願いします。他にご不明な点がございましたら、お気軽にお問い合わせください。

このスレッドを見つけましたが、利用するのに十分な特定の情報がありませんでした。他の議論はPythonソケットパッケージに関するものでしたが、PyQtを使用する場合、すべてがうまく機能するようにサーバーはQTcpServerである必要があることを理解しています。

*** 編集 ***

これが私のソリューションの最初の段階です。基本的なサーバーとクライアントを作成しました。サーバーは、クライアントが行編集ボックスに入力した内容を送り返すだけです。

これは、PythonとQtを使用したRapidGUIプログラミングの第18章の「buildingservices」の例に基づいています。

私が行った主な変更は、スレッドが無期限に実行され続け、ソケットが開いたままになり、クライアントから送信されるデータをリッスンすることです。

複数のクライアントを正常に処理します。確かに醜いですが、良い出発点だと思います。

私が望んでいるのは、1人のクライアントがテキストを入力するたびに各クライアントに通知できるようにすることです(たとえば、通常のチャットプログラムのように)。

また、あなたが誰と取引しているのかを知るために、私はプロのプログラマーではありません。私は物理学者であり、何年にもわたって規律のないスクリプトを書き、自分のベルトの下をいじっています。しかし、私はデータを渡すことができる基本的なサーバー/クライアントプログラムを開発しようと思います。

ヘルプや提案をありがとう!

サーバ:

クライアント:

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

c++ - 多くの同時クライアントで QTcpServer が遅い

大きなファイルを提供するQtでTCPサーバーを書いています。アプリケーション ロジックは次のとおりです。

  1. QTcpServer をサブクラス化し、incomingConnection(int) を再実装しました
  2. incomingConnection で、「Streamer」クラスのインスタンスを作成しています
  3. 「ストリーマー」は、incomingConnection の setSocketDescriptor で初期化された QTcpSocket を使用しています
  4. クライアントからのデータが到着したら、readyRead() スロット内から初期応答を送り返し、ソケットのシグナル bytesWritten(qint64) を Streamer のスロット bytesWritten() に接続します。

bytesWritten は次のようになります。

したがって、基本的に、保留中のデータがすべて完全に書き込まれたときにのみ、新しいデータを書き込んでいます。それが最も非同期的な方法だと思います。

そして、多くの同時クライアントがあるとかなり遅くなることを除いて、すべてが正しく機能します。

約5つのクライアントで-そのサーバーから約1 MB /秒の速度でダウンロードしています(自宅のインターネット接続の最大値)

約 140 クライアントの場合、ダウンロード速度は約 100 ~ 200 KB/秒です。

サーバーのインターネット接続は 10 Gbps で、140 クライアントで使用すると 100 Mbps 程度なので、問題はないと思います。

140 クライアントでのサーバーのメモリ使用量 - 2GB のうち 100 MB が利用可能

サーバーの CPU 使用率 - 最大 20%

ポート 800 を使用しています。

ポート 800 に 140 のクライアントがあり、ダウンロード速度が 100 ~ 200 KB/秒の場合、ポート 801 で別のコピーを実行し、問題なく 1 MB/秒でダウンロードしていました。

私の推測では、どういうわけか、Qt のイベント ディスパッチ (またはソケット通知機能) が遅すぎて、これらすべてのイベントを処理できないのです。

私はもう試した:

  1. Qt全体と私のアプリを-O3でコンパイルする
  2. libglib2.0-dev をインストールし、Qt を再コンパイルします (QCoreApplication は QEventDispatcherGlib または QEventDispatcherUNIX を使用するため、違いがあるかどうかを確認したかった)
  3. 特定のスレッドに現在どれだけのクライアントがいるかに応じて、streamer->moveToThread() を使用して、いくつかのスレッドを生成し、incomingConnection(int) で生成しますが、変更はありませんでした (ただし、速度ははるかにさまざまであることがわかりました)。
  4. を使用したワーカー プロセスの生成

コード:

次に、メイン プロセスで QLocalServer を開始し、incomingConnection(int socketDescriptor) から socketDescriptors をワーカー プロセスに渡します。正常に動作しましたが、ダウンロード速度は依然として遅かったです。

また試しました:

  1. incomingConnection() の fork()-ing プロセス - サーバーをほとんど殺した :)
  2. クライアントごとに個別のスレッドを作成 - 速度が 50 ~ 100 KB/秒に低下
  3. QRunnable で QThreadPool を使用 - 違いなし

私はQt 4.8.1を使用しています

私はアイデアを使い果たしました。

それはQt関連ですか、それともサーバー構成の何かですか?

それとも、別の言語/フレームワーク/サーバーを使用する必要がありますか? ファイルを提供する TCP サーバーが必要ですが、パケット間で特定のタスクを実行する必要もあるため、その部分を自分で実装する必要があります。

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

c++ - 接続 (QT プロジェクト内) が機能しない

QT ライブラリを使用して、最初のマルチスレッド アプリケーションの作成を開始しています。

QTcpServer と QTcpSocket に関する qt ガイドに従って、このコンストラクターとの接続を作成するサーバー アプリケーションを作成しました。

これは、新しいクライアントが接続を試みるたびに新しいスレッドを作成する incomingConnection() 関数です。

さて、これは MyThreadClass です:

コードは正常にコンパイルされますが、(サーバーの起動後に) クライアントを起動すると、サーバーから次のエラーが表示されます。

その後、サーバーはクライアントからデータを受信できません。

誰かが何か考えがありますか?

事前に感謝 ダニエレ