問題タブ [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.

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

c - recvfrom が追加の IP ヘッダーを作成するのはなぜですか?

recvfromが追加の IP ヘッダーを作成するのはなぜですか?

私は送信しています:

しかし、データを受信しようとすると、あるようです

クライアントコード:

サーバーコード:

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

sockets - setsockopt() が設定したタイムアウトを無効にする方法は?

私が開発しているプログラムでは、無期限にブロックするのsetsockopt()を防ぐために、を使用してタイムアウトを設定しました。recvfrom()タイムアウトを無効にするにはどうすればよいですか?

(私はUbuntuを使用しています)

0 投票する
0 に答える
176 参照

c++ - recvfrom がクライアント側で機能しない

私は低レベルのピアツーピアアプリケーションを作成しています。ピアがどのファイルがどのピアにあるかを知る必要がある場合、トラッカー/サーバー(登録を維持している)に尋ねます。その後、トラッカーはそのピアのアドレスで応答します。私のプログラムでは、トラッカー側は問題なくピア情報を送信していますが、受信側ではその情報が受信されていません。私はこれを整理しようとして何時間も無駄にしてきましたが、これを解決しようとしても深みがありません。トラッカー/サーバーに問い合わせるメソッドのコードは次のとおりです。

見て、あなたが助けることができるかどうかを確認してください。期待していただきありがとうございます:)

編集: recvfrom はブロッキング呼び出しであるため、メッセージが送信されたにもかかわらず、私のプログラムはトラッカー/サーバーからのメッセージを無限に待ちます。

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

python - recvfrom()がデータを受信して​​いません - python

マシンから任意のサイト (この場合は www.google.com.

私のプログラムは recvfrom() 呼び出しで動かなくなったようです。ノンブロッキング ソケットに設定したので、次のエラーが表示されます。

ブロッキングソケットとして実行すると、プログラムは永久に実行されます。

以下は私のソースコードです。なぜ私がこの問題に遭遇しているのか分かりますか? ありがとう!

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

c - recvfrom からバッファを取得する

UDP を介して通信する三目並べゲームを作成しようとしています。今のところ私はコードを持っています:

からバッファを取得しrecv_txt、次のように構造内に配置する必要があります。

それを新しいスレッドに渡します。しかし、からバッファを取得できませんrecv_txt。私はCでかなり新しいので、今のところポインターをうまく扱うことができません。

アドバイスをありがとう。

編集

Frankie_c が提供する解決策を試しましたが、printf現在問題があります。試してみるとmain

コンソールに何も表示されないか、エラー メッセージが表示されません。

EDIT2 - 完全なコード

パケットを受信した後、次のようになります。

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

c - メッセージを 1 秒後に破棄するにはどうすればよいですか? (C の UDP クライアント/サーバー)

クライアントがメッセージを送信し、サーバーがそれをエコーバックするhttp://cs.baylor.edu/~donahoo/practical/CSockets/code/UDPEchoClient.cに基づいた UDP クライアントがあります。パケットをドロップできる構成可能なサーバーがあり、上記のコードで 1 つだけではなく複数のメッセージを送信しています。1 秒以上かかる場合、メッセージを削除するにはどうすればよいですか? 今のところ、recvfrom() でメッセージを取得した後、各メッセージをチェックしていますが、メッセージごとに 1 秒待ちたくないので、プログラム全体を 1.5 秒未満で実行したいと考えています (たくさんのメッセージがありました。)1秒以内に受信されなかった場合にドロップされたと見なされるように、各メッセージにタイマーなどを添付する方法はありますか? ありがとう!

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

c - C : Linux ソケット: Recvfrom() による UDP パケットのフェッチが遅すぎる

10Mbpsの速度で UDP パケットを受信して​​います。各パケットは、約1109 バイトで構成されます。したがって、 eth0で受信している1pkt/ms以上になります。Cのはパケットを受信し、そのパケットを Java に渡します。Java は、パケットのフィルタリングと必要な処理を行います。recvfrom()

ボトルネックは次のとおりです。

  1. recvfrom()遅すぎる: おそらく CPU を取得できないため、フェッチに 10 ミリ秒以上かかります。

  2. インターフェイス (JNI) を介して C から Java にパケットを渡すには、1 ~ 2 ミリ秒かかります。

  3. Java 自体でのパケットの処理は、データベースの挿入または画像処理を行う必要があるかどうかによって、0.5 ~ 1 秒かかります。

したがって、問題は多くの遅延が積み重なり、半分以上のパケットが失われることです。

可能な解決策は次のとおりです。

  1. C の必要性をrecvfrom()完全に排除し、Java で UDP フェッチを直接実装します (注: そもそも、C の recvfrom() は、UDP ではなく生のパケットを受信するために実装されました)。この解決策により、JNI 転送の遅延が短縮される場合があります。

  2. Java で UDP 受信機能にマルチスレッドを実装します。ただし、マルチスレッドでは着信パケットの順序が保証されないため、シーケンスの UDP パケットに ID が必要になります。(ただし、この特定のプログラムでは、パケットを順序付けする必要があります)。このソリューションは、すべてのパケットを受信するのに役立つ可能性がありますが、データを送信するプロトコルを変更して、シーケンス識別子を追加する必要があります。マルチスレッドにより、受信側が CPU を取得する可能性が高くなり、パケットをすばやく取得できます。

  3. Java では、着信パケットを格納する巨大なバッファとしてブロッキング キューを実装できます。Java パーサーは、このキューからのパケットを使用して処理できます。ただし、レシーバー機能が十分に高速で、パケットをドロップせずにすべての受信パケットをキューに入れるかどうかはわかりません。

どのソリューションが最適か、または上記のソリューションの組み合わせが機能するかを知りたいです。どんな助けや提案も大歓迎です。