問題タブ [qtcpsocket]
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.
qt - QTCPSocketで入力の終わりに到達したことを適切に判断するにはどうすればよいですか?
QTCPSocketから読み取る次のコードがあります。
このコードの問題は、すべての入力を読み取り、最後に30秒間一時停止することです。(これがデフォルトのタイムアウトです。)
長いタイムアウトを回避し、入力の終わりに到達したことを検出する適切な方法は何ですか?(これはスレッド内で同期的に発生することになっているため、シグナルを回避する回答が推奨されます。)
xml - Qtを使用してTCPソケットを介して部分的にxmlメッセージを送信する
私たちは、xml 要求を生成してサーバーに送信し、要求を解析して要求された情報を xml 文字列で返すクライアントが存在するプロジェクトを作成しています。
xml 応答が小さい場合、アプリケーションは正常に動作しますが、約 2500 文字を超えると、クライアント側で途切れることがあります。クライアントとサーバーが同じマシン上で実行され、ホーム アドレス 127.0.0.1 を介して通信する場合、応答が問題なく解析されるため、私は時々言います。ただし、クライアントとサーバーが異なるマシン上にあり、LAN を介して通信する場合、クライアントはメッセージを約 2500 文字にカットします。
通信は tcp ソケットによって行われます。Qt を使用しており、クライアントには qTCPsocket があり、サーバーには qTCPserver と qtcpsocket へのポインターがあります。
この問題の解決策として、xml を文字数またはタグごとに分割して送信することが考えられます。メッセージを部分に分割するのは簡単ですが、部分を送信し、クライアントまたはサーバーに部分を読み取らせて 1 つの xml 要求にコンパイルさせると、問題が発生します。
例として、クライアントがリクエストを複数の部分に分けて送信することをテストしたいと考えました。
以下は、リクエストを送信するためのクライアント関数呼び出しです。xmlReq は別の場所で生成され、渡されます。メッセージを部分に分割する例として、xml 要求から終了タグを取り除き、後で別の部分として送信します。
次はサーバーコードです。xml 終了メッセージ タグが表示されるまでクライアントからのメッセージを読み取り、データを処理して応答をクライアントに返すように記述されています。
サーバーを起動するコードです。
新しい接続を取得すると、次のようなacceptConnectionスロットを呼び出します
startRead は次のようになります。
私の考えでは、開始読み取りは、クライアントがメッセージを書き込むたびに、サーバーがそれを読み取り、サーバーが保存する xmlRequest に添付するようにコーディングされています。メッセージに xml 終了タグが含まれている場合は、リクエストが処理されます。
ただし、クライアントが連続して書き込みを行った場合、サーバーは最初の書き込みのみを読み取り、すべてを読み取らず、xml 終了タグを受信しないため、要求を処理しません。
私が答える必要がある質問は、サーバーがクライアントの複数の書き込みに応答しないのはなぜですか? xml 文字列を分割して送信し、サーバーにすべての部分を読み取らせて、それを 1 つの文字列に再度変換できるようにするにはどうすればよいですか?
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++ ポリモーフィズムの簡単なビットのはずです。
よろしく、
スティーブン。
qt - QTcpSocket::waitForBytesWritten の動作?
の振る舞いに少し混乱していますQTcpSocket::waitForBytesWritten()
...
この機能はいつまでブロックされますか?
- TCP経由で送信するためにデータがOSの内部バッファに書き込まれるまで?
- データが物理的にTCPパケットに変換されて送信されるまで?
- データ全体が送信され、リモート クライアントがすべてのパケットを受信したことを確認するまで?
ドキュメントを見ましたが、あまり明確ではないようでした。
c++ - QTcpServer: 接続されたクライアントに HTTP/1.0 200 OK を送信します
Shoutcast ストリームをリッスンするように QTcpServer をセットアップしました。newConnection() シグナルは、次のように発生します。
HTTP 200 を送信するにはどうすればよいですか?
c++ - QTcpSocketリッスン
QTcpSocket をリッスンすることは可能ですか? Tcp で単純な p2p 接続を使用しています。しかし、ランダムな空きポートで QTcpSocket を開始する方法が見つかりません。QTcpServer を使用する必要がありますか、それとも接続が 1 つだけの場合は少し過剰ですか?
qt - QTcpSocket とバイナリ データの送信に関する問題
次のコードがあります。
サーバーでは、.bmp ファイルのヘッダーのみを受信しています。このような動作の原因は何ですか? そして、この問題を解決するにはどうすればよいですか?
qt - QTcpSocket の問題
Qt を使用してチャットを作成します。問題を抱えて。クライアントの QTcpSocket は接続状態のままですが、サーバーは newConnection() シグナルを送信します。ネットワーク セッションは必要ありません。何故ですか?ここにいくつかのコードがあります:
requestForID() が実行されることはありません
サーバーは着信接続を表示し、クライアントは接続状態のまま接続を発行せず、サーバーメッセージも受信しません...何かアイデアはありますか?
qt - QTcpServer - QTcpSocket 確認質問
-->QTcpSocket,QTcpServerを使ってプログラムを書いています。パケットが配信されることを保証するために、何らかのコード (つまり、確認手順) を追加する必要がありますか?
もしそうなら、ネット上ではそのようなものは見つけられなかったので、いくつか例を見てみたいと思います。
-->QTライブラリのどこかで、これらはすでにカバーされているので、そのようなものは必要ありませんか?
どんな助けでも大歓迎です。ありがとう。
編集:今、私は以下に追加した QDataStream のチャンクでヘッダーを使用する方法を尋ねています。どの部分が書き込まれているか、どの部分が欠落しているかを追跡できるように、すべてのチャンクに情報を伝えるヘッダーが必要です。以下をご覧ください。
qt - QTcpSocket 経由で整数を送信するには?
私はQtが初めてなので、これが完全にばかげた質問であれば...
QTcpSocket を使用しようとしています。
私が行った場合:
write() が整数 (const char * ではない) で機能しないことについて不平を言っています。
私が行った場合:
反対側はそれを整数 49 (1 の場合は ASCII) と見なします。
類似しているが異なる問題で、QTcpSocket を介して構造体または共用体を送信することは可能ですか?
==================================================
編集:
サーバーはすでに整数を受け入れており、整数を期待しています-私はそれを制御できません。