問題タブ [recv]
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.
c - cのソケットからの応答を読み取る方法は?
次のことを行うTCPクライアントを作成しようとしています。
3番目のコンディションに苦労しています。Webサーバーから応答がありませんでした。
これが私のコードです:
c - winsockのrecv-function
winsockのrecv-functionについて一般的な質問があります。クライアント/サーバーアーキテクチャを使用してプログラムを作成します。このプログラムでは、クライアントがカメライメージをサーバーに送信し、サーバーが別のイメージをクライアントに送り返します。プログラムが閉じられるまで、クライアントはいくつかの画像を送信します。また、サーバーは受信したすべての画像を他の画像で応答します。
クライアント(送信)---->サーバー(受信)---->サーバー(送信)---->クライアント(受信)。^ _ __ _ __ _ __ _ ____ LOOP _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ |
私の問題は、サーバーが機能を受け取ることです。512バイトの大きなバッファを使用してreceive関数を数回呼び出すと、画像全体を受信したことをどのようにして知ることができますか?私が見つけた例は、接続が閉じられるまで待つだけです(recvは0を返します)が、接続を閉じずにいくつかの画像を受信したいと思います。しかし、バッファにバイトがなくなるまで受信すると、recv関数は新しいバイトができるまでスレッドを停止します(ただし、サーバーが受信する前に最初に独自のイメージをクライアントに送り返したいため、これは発生しません。次のもの)。
では、次のバイトや接続が閉じられるのを待たずに、サーバーが独自のイメージをクライアントに送り返すことができるように、イメージ全体が受信されたことをサーバーに通知する可能性はありますか?
multithreading - Winsockローカルループバックレイテンシ
私はtcpソケットを使用して、WindowsXP上の2つのアプリ間のプロセス間通信を提供しています。私はさまざまな理由でtcpソケットを選びました。平均往復時間は2.8ミリ秒です。それは私が予想していたよりもはるかに遅いです。プロファイリングは、一方のアプリがsendを呼び出してから、もう一方のアプリがブロックしているrecvが戻るまでの間に遅延があることを示しているようです。
アプリ、デーモン、クライアントもあります。これらは、次の擬似コードのように構成されています。
デーモンスレッド1(新しい接続をリッスンします):
デーモンclient_socketスレッド(クライアントからのパケットをリッスンします):
クライアントスレッド1:
レイテンシーがとても悪い理由はありますか?Nagelのアルゴリズムを疑ったが、コードに次のようなものを散らかした。
助けにはならない。クライアントソケットとデーモンソケットの両方でこれを行う必要がありますか(私はやっています)?
私はクアッドコアマシンを使用しており、負荷やディスクアクティビティなどはほとんどありません。
nonblocking - 接続完了前のノンブロッキング TCP ソケットでの recv の動作
友達、
ノンブロッキング TCP ソケットを使用しています (AIX 上)。connect() を試みたところ、EINPROGRESS が発生しました。私の質問は、接続が完了する前に recv() を呼び出した場合、(最も適切な) エラー コードは何でしょうか?
接続が失敗した場合に備えて、recv() を呼び出すと、ECONNREFUSED が発生することがわかりました。以前の connect() 試行に対応するエラーが発生したことを意味します。同じロジックを使用すると、recv() に対して EINPROGRESS を取得する必要があります。私は私のアプローチで正しいですか?
はいの場合、別の質問が発生します-なぜそのようなエラーコードが recv() のエラーコードに含まれていないのですか?
c++ - winsock recv で 10014 エラーが発生する
私はコードから始めます:
このコードを実行すると、ret が -1 になり、WSAGetLastError() が 10014 を返します。これは、ポインターが不良であることを意味します。
しかし、なぜこれが機能しないのかわかりませんか? reinterpret_cast 行をコメントアウトして、以下の行を使用すると機能します!
reinterpret_cast は危険であると主張することもできますが、 unsigned char と signed char の両方がまったく同じサイズであるため、問題ないと思います。
std::vectors は、私が知る限り、メモリ内で直接アドレス指定しても安全なはずです。
おもしろいのは、send() で同じ vector-type を使って同じことをすると、うまくいくということです! 送信機能:
ご覧のとおり、この場合は CharBuf が const であること以外に違いはありません。
recv() が send() よりも機密性が高いのはなぜですか? recv() は、ポインターが無効であることをどのように知ることができますか (明らかにそうではありません)?? 表示されるのは char 配列だけです!
要求に応じて、受信関数全体を作成します (すべての関数を詳しく説明することはできないことに注意してください。
どうでも。関数を貼り付けているときに見つけました。いつものように、他の人に説明しようとするとエラーが見つかります :) 何が間違っていたのかを理解するのは読者に任せますが、ヒントとして &pData[0] を示します。助けてくれてありがとう:D
c - send()recv()、ソケットプログラミング、Cを介した複数のメッセージの送信
ユーザーからの要求に応じてサーバーにメッセージを送信できるプログラム(クライアント)を作成しようとしています。簡略化されたコードは次のとおりです。
クライアント:
サーバ:
さて、これは私が送信する最初のメッセージに対して機能します。しかし、その後、別の接続を確立できません(クライアントプログラムで接続しようとすると、「不正なファイル記述子」というエラーメッセージが表示されます)。誰かが私が誤解していることを確認できますか?ありがとうございました :)
sockets - UDP ソケットを使用してデータを受信する
アプリケーションを書いていますが、ポイントがわかりません。特定のクライアントからデータを受信しようとしています。TCP ソケットでは、accept は番号を返すfd
ので、このfd
番号を介して特定のクライアントと通信できます。
ではrecvfrom
、そのクライアントからデータを受信するように指定することはできません。送信したすべての人からデータを受信します。これを解決しようとしていますが、これを行う方法がわかりません。
2 つ目の問題は、ソケットを開いた後で別のソケットを開くことです。クライアントに 2 番目のソケット番号を送信すると、クライアントはこの 2 番目のソケットで 2 番目のデータを送信します。サーバー側では、サーバーは (2 番目のソケットではなく) 最初のソケットをリッスンします。ただし、クライアントは 2 番目のソケットからデータを送信し、サーバーは最初のソケットをリッスンしますが、サーバーはデータを取得します。2 つのソケットを整数として出力すると、2 つが異なることがわかります。サーバーは、最初のソケットの 2 番目のソケットで送信されたデータをどのように読み取ることができますか?
ええ、私の質問は少し複雑です。基本的に私は言います:
上記の行で、特定のクライアント (クライアント 2 など) にリッスンするように指示するにはどうすればよいでしょうか? (TCP ソケットではfd
番号で行われますが、UDP ソケットではどうですか?)
c++ - recv()とvectorを使用するよりエレガントな方法
これまでのところ、私はこのコードサンプルを持っています:
resize()を2回使用せずに、バッファー内のデータ長を知ることは別の方法ですか?適切なサイズにサイズ変更されていないベクトルにデータを受信することはできないためです。C ++ STLのドキュメントによると、reserve()メソッドは割り当てを行わないと思います。そして別の質問:この種の技術を使用することはメモリリークに対して安全ですか?
c - recvfrom 無限受信問題
udp ソケットを使用してサーバーを作成しています。クライアントが最初のメッセージを送信して接続した後、新しいソケットを開き、このソケット (リッスン用の最初のソケット) でこのクライアントと通信し、各クライアントのスレッドを作成します。しかし、スレッドでは、クライアントがデータを送信するたびに recvfrom がデータを受信するため、while ループは無限に進みます。私のコードの問題は何ですか?
以下のコードサンプル:
c - tcpメッセージ通信
こんにちは私はtcp接続を使用してメッセージを送信/受信したいと思います。問題は、多くのメッセージを送信してレイテンシーを測定したいということです。したがって、メッセージが送信されるたびに受信したくありません。ただし、着信メッセージを時間内に処理しないと、プログラムは常に予期しない結果を受け取ります。msgを送信するプログラムをブロックせずにrecv()を処理できる方法はありますか?コメントをいただければ幸いです。