問題タブ [recvfrom]
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++: サーバーとクライアント間の古典的な通信演習
良い一日。
低レベルの C プログラミングを学んでいるコンピューター サイエンスの学生として、私はサーバーとクライアントの通信プログラムを作成するという「古典的な」演習に行き詰まっています。
目標は、リモート クライアント コンポーネントからコマンドを受け取り、それをローカル シェル コマンドとして実行するサーバー コンポーネントを開発することです。次に、コマンドの出力が再度クライアントに送信されます。ものすごく単純。
私のコードはクライアントからコマンドを送信し、サーバーはそれを正常に受信して実行し、出力をキャプチャします。しかし、この時点で、sayd サーバーがその出力をクライアントに返信しようとすると、何かがうまくいかず、クライアントは何も受信しません。問題がサーバー側にあるのか、クライアント側にあるのかはわかりません。
何か案が?前もって感謝します!
サーバ:
クライアント:
fprintf(stderr, ""); ですべてのトレースを出力するとします。そのため、フォークによって端末のフォーカスが失われることは問題になりません。
さようなら、そしてありがとう!
c - poll() と recvfrom() の混乱
生のイーサネット フレームを送受信するプロトコルを C で実装しようとしていますが、Linux 環境でpoll()
およびを使用していくつかの問題に遭遇しました。recvfrom()
私の問題はほとんど概念的なものだと思うので、今のところコードを投稿することは避けます。
受信データ用に 2 つのソケットがありpoll()
、いずれかのソケットでデータの準備ができたことを、戻り値と関連するpollfd
構造体の状態を通じて示すために使用されています。私が最初にプログラムを実行したとき、これは今私のために働いています。テストのために、私は ARP フレームのみに関心がありpoll()
、ARP フレームが到着するのを待つために使用できます。到着したらrecvfrom()
、データを処理できる場所にコピーするように呼び出します。これはすべて正常に機能しています。
poll()
問題は、ソケットに新しいデータが到着していない場合でも、ソケットからデータを読み取る準備ができていることを後続の呼び出しが報告し続けることです。ソケットからデータを呼び出して読み取ったら、データの準備ができたことを報告する前に、新しいフレームが到着するまで待ちrecvfrom()
たいと思います。poll()
これまで使用したことがないため、記述子を「クリア」して、新しいフレームが来るまでデータの準備ができていることを報告するのpoll()
をやめる明示的な手順があるかどうかはわかりません。メンバーをクリアしています。を呼び出す前に構造体のpoll()
revents
pollfd
poll()
poll()
revents
私はpoll()
マニュアルページを調べましたが、これに関する情報を見つけることができませんでした。ソケット/ポーリングが高レベルでどのように機能するかを誤解しているように感じるので、助けていただければ幸いです。
[編集] これが私のコードの大部分です。この例のコードは、ソケットを 1 つだけ含めることで単純化しています。これもすべてクラスにカプセル化されて広がっていますが、このように書き直すと私の問題が再現されます。私の最終的なコードには、API 呼び出しのエラー チェックがあり、コンテンツを印刷するだけでなく、受信バッファーをコピーしてフレームを処理しますが、それ以外はほとんど同じです。
最初はこれについて言及しませんでしたが、このコードを Beaglebone Black にデプロイしようとしています。GCC を使用してコンパイルされた Ubuntu の VM でこのプログラムを実行すると、期待どおりに動作します。フレームを受信/印刷した後、プログラムは新しいフレームが到着するまで視覚的にアイドル状態になります。プログラムをクロスコンパイルして実行すると、プログラムは新しいパケットが到着するまで同じパケットを連続して出力します。戻るreceiverBuffer[]
たびにクリアしているので、データを継続的にコピーしているため、バッファにコピーされた後、内部バッファからデータをクリアしていないようです。recvfrom()
recvfrom()
python - TCP の recv() および recvfrom() メソッド
TCP socket.recvfrom()
が UDP の場合のように送信者アドレスを返さないのはなぜですか?
TCP socket.recv() が空の文字列になるのはいつですか?
ありがとう!
python - X 秒待って UDP パケットを受信する Python
サーバーに登録するPythonでクライアントを実行しています。そのクライアントは UDP パケットを送信し、サーバーからの応答パケットregister
を待ちます。register accepted
UDP であるため、一部のパケットが失われる可能性があるため、次のコードが必要です。
パケットを送信し、応答を 5 秒間待ちます。パケットが受信されない場合は、再度パケットを送信してから 10 秒間待ちます。応答がない場合は、15 秒間待ちます。応答がない場合は、ループを中断します。
私の問題は、私がやっているパケットを受信することです:
そして rcvfrom はブロッキングメソッドです。検索したところselect
、パケットを受信したときにソケットを読み取って取得できると思いますが、その方法がわかりませんselect
。自分がやっていることの簡単な例が見つかりません。
誰か助けてくれませんか?
ありがとう!
c - C ソケットは UDP を送信し、ルーターからの ICMP 応答を処理します
有効期限が 1 のルーターに UDP パケットを送信して、ICMP 時間超過応答を受信しようとしています。これまでのところ、パケットを送信できますが、プログラムが実行の recv 部分に到達すると、ハングします。recvfrom のエラーチェックがありますが、そこまで行きません。私のコンピュータはリクエストを受信しています。これは、プログラムを実行するときに Wireshark を実行し、ICMP 要求をフィルター処理するためです。プログラムを実行するたびに、返信が届きます。recvfrom で何が間違っていますか?