問題タブ [tcpsocket]
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.
ruby - Ruby TCPSocket が接続を失い続ける
クライアントとサーバーがあります。サーバーを起動し、クライアントを実行すると、最初は正常に動作します。クライアントを (サーバーを再起動せずに) 2 回目に実行すると、クライアントがハングしたように見えます。誰が何が間違っているかを見ることができますか?
クライアントがいます:
そしてサーバー:
ruby - ruby ソケットの問題
私はまだ Ruby の初心者ですが、「Socket」クラスを何度も使用していたため、Ruby ソケットの使用に慣れてきたので、ソケットとそのオプションを完全に制御できます。
問題は、私はそれを少し簡単にしようとしているので、「TCPSocket」クラスを使用しようとしていますが、魔女 (推測) は「Socket」クラスほど多くの制御を提供しません。
私のスクリプトは次のようになります。
問題は、送信ラインの「0」の代わりに何が想定されるかということです?? 「0」が標準パケットを意味する場合、そこには標準以外に何が存在できますか?それは TCP パケットに対する何らかの制御ですか?? もしそうなら、「ソケット」クラスを使用してソケット全体を手動で記述するよりもはるかに簡単です。
ruby - Ruby TCPSocket recv がブロックされ、返されない
だから、私は次のコードを持っています:
終わり
通常、これは問題なく機能します。私が話しているサーバーは、通常、非常に迅速に応答を返し、すべてが順調です。
そして、今日、サーバーに問題が発生しました。私の問題ではありませんが、これによりアプリケーション全体がハングし、recv がタイムアウトするのを待ちました。これは正確には最適ではありません。
すぐに何かが聞こえない場合、recv をタイムアウトにする方法はありますか? ルビーのドキュメントを見てみましたが、本当に混乱しています(つまり、TCPSocketは3つのメソッドしか実装しておらず、openまたはrecvのいずれも実装しておらず、Socketの親クラスもこれらのメソッドを実装していません。そして、Socketの親クラスはObjectのようです? 私は完全に混乱しています)
cocoa - 1つのTCPソケットから別のTCPソケットに一度に32768バイト以上を送信します
やあみんな、この質問がまだ出されているかどうかはわかりませんが、次の状況を想像してみてください。
2つのTCPソケット(2つで開いてNSSocketPort
リッスンしてNSFileHandle
いる)があり、それらの間にいくつかを送信したいと思いNSData
ます。
NSData
32768バイトを超える長さのインスタンスを送信するまではすべて問題ありません。このバイト数を超えると転送されません。だからここに私の質問があります:
1)Cocoaが一度に32768バイト以上を送信できないのはなぜですか?
2)回避策を講じる必要がありますか?
3)はいの場合、データを分割しますが、どのように分割しますか?そして、他のソケットは、すべてのデータがいつ送信されたかをどのように知るのでしょうか?
ちなみに、この単一NSData
インスタンスを送信した後、両方のソケットを再度閉じる必要があります。
ruby - Ruby TCPServer ソケット
ソケットのプログラミング方法が混乱しているのかもしれませんが、このようなものは機能しないのでしょうか?
クライアント TCPSocket からデータを「取得」する他のほとんどすべての方法を試しましたが、それらはすべてハングし、ループから抜け出すことはありません (getc、gets、read など)。何かを忘れているような気がします。私は何が欠けていますか?
ruby - クレデンシャルを使用したルビーソケットプログラミング
こんにちは皆さん、
ルビーソケット接続TcpSocketを使用してリモートサーバーへの接続を確立しようとしています。
TcpSocket.new(port、host)から始めました
さて、どうすればクレデンシャルをそれに渡すことができますか。
リモートサーバーには、接続を許可するための資格情報が必要です。
どんな助けでも大歓迎です。
ありがとう
ruby - Ruby TCPSocket: 利用可能なデータ量を調べる
RubyのTCPSocketで利用可能なデータのバイト数を調べる方法はありますか? つまり、ブロックせずに準備できるバイト数は?
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 つの文字列に再度変換できるようにするにはどうすればよいですか?
multithreading - Qt 4.7 で UI をブロックしないネットワーク
複数のクライアントが接続できるサーバーがあります。クライアントは GUI で、サーバーはコマンド ラインです。クライアントにはいくつかの機能 (接続やログインなど) があり、サーバーに送信されたときに応答を受け取る必要があります。
基本的に、QTcpSocket 関数の waitForConnection と waitForReadyRead を実行する必要があります。ただし、UI をブロックせずにこれを行う必要があります。
私がやろうと思ったことは次のとおりです。クラス(クライアント)に、すべての待機を行うQThreadを実装させます。これはメインで作成されます。
次に、GUI (ConnectToServerDialog など) を接続する準備ができたらいつでも実行します。スレッドからダイアログに「接続された信号」を接続するので、接続中または接続がタイムアウトしたときに、この信号が送信されます。
これでアサート エラーが発生します (別のスレッドが所有するオブジェクトにイベントを送信できません)。
私がやっていることが良いアプローチであるかどうか誰か教えてもらえますか?もしそうなら、なぜ私のプログラムがクラッシュするのですか?
arrays - 24ビット整数を3バイト配列に変換するにはどうすればよいですか?
ちょっと私は完全に私の深さから外れていて、私の脳は傷つき始めています.. :(
3バイト配列に収まるように整数を変換する必要があります(これは24ビット整数ですか?)そして、ソケットを介してバイトストリームからこの数値を送受信するために再度戻ります。
私は持っています:
私の主な問題は、intが実際に正しく変換されたことを確認する方法がわからないことだと思います。これは、データを送信するためにも必要な変換です。
どんな助けでも大歓迎です!