問題タブ [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 投票する
0 に答える
412 参照

android - Android - recvfrom() でセグメンテーション違反を常に受け​​取る

BScEE での私の最後のプロジェクトでは、アドホック ネットワークを作成しようとしています。私は Galaxy S2 デバイスで作業しており、ほとんどのコードを C ( JNI ) で記述しています。通常のメッセージを送信する以外に、5 秒ごとにブロードキャストを自動的に送信しています。データの受信をリッスンして待機しているスレッドがあります。セグメンテーション違反が原因でクラッシュし続けます- ndk-stack と addr2line を使用すると、 recvfrom が示されます : int retval = recvfrom(sockfd, buf, BUFLEN, 0, (struct sockaddr*)&cli_addr, &slen); ほとんどの場合、実行中のスレッドが受信を待機しているため、それは誤警報であり、セグメンテーション問題は別の場所にあります。

セグメンテーション違反の原因をデバッグするにはどうすればよいですか。実際に recvfrom() コードが原因である場合はどうすればよいですか。[お役に立てれば、ここに墓石を追加できます]

編集 1: 墓石の長さは 2700 行です。最初と最後を追加しました。最後に、recvfrom に誘導するアプリが含まれています。

墓石の始まり:

墓石の終わり:

これは受信 JNI 関数です。

}

ここで私を救ってくれる人に感謝します:(

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

c - C recv 関数の動作

これは私の2つのコードです:

server.c

client.c

サーバー側で、「test」を出力する printf が、クライアントがメッセージ送信要求で到着する前に動作しないのはなぜですか? 同じことが、「test2」を出力する 2 番目の printf にも当てはまります。おそらく私を逃れる概念的な何かがあるでしょう!

recv をコメントすると、実行の流れは正常に戻ります。

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

c - C を使用したソケットプログラミングでの recvfrom

このコードに出くわしたとき、私はCでソケットプログラミングを理解しようとしていました:

recvfrom()メッセージを送信するために呼び出しに IP アドレスは必要ないようです。マニュアルページを見ると、次の行が明らかになりました。

src_addr が NULL ではなく、基になるプロトコルが送信元アドレスを提供する場合、この送信元アドレスが入力されます。src_addr が NULL の場合、何も入力されません。この場合、addrlen は使用されず、NULL にする必要があります。

したがって、基になるプロトコルが送信元 IP アドレスを提供すると思います。私の問題は、メッセージを受信するアドレスを実際にどのように把握するのですか? アドレスにメッセージを送信すると、同じソケットを使用して他のアドレスにメッセージを送信できないということですか? 同じアドレスを使い続けるには?

助けてください。Google や講義ノートのどこにも答えが見つかりませんでした。

前もって感謝します。

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

udp - UDP メッセージ サイズの違い

A が B にサイズ N の UDP メッセージを送信するとします。

B は、サイズが N_1 であることを期待してこのメ​​ッセージを受け取ります。

N_1!=N の場合はどうなりますか?

0 投票する
3 に答える
793 参照

c - C: 失われた UDP パケットの最後のバイト数

UDP ベースのストリーミング サーバーを作成していて、奇妙な問題に遭遇しました。単純なエラーだと確信していますが、解決策が見つかりません。サーバーは次の行に沿って何かを行います。

これはうまくいくようです。デコードでき、データは破損していません。ただし、次のように動作する(または動作しない)テストクライアントを作成しました。

今私の問題に。を使用して16進数でテストファイルを検査するとdiff <(xxd test_before) <(xxd test_after)、次のようになります(差分行の例):

つまり、パケットのデータの最後の 12 バイトが失われます。他のすべては問題ありません。

これは単なるテスト コードなので、それほど重要ではありませんが (私は推測します)、奇妙であり、その理由を知りたいと考えています。

何か案は?

編集:

私は今、答えからいくつかのアプローチを試みましたが、これまでのところどこにも行きませんでした。私は努力し続けます。

編集2:

コードは別のマシンで動作します。何が問題だったのかはわかりませんが、私以外の誰にとってもうまくいくようです。時間を無駄にして申し訳ありません。コードの改善方法などについて、親切な提案をありがとうございました。

前もってありがとう、カーソン

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

c - C の POSIX スレッドで recvfrom() を使用すると、ファイル記述子エラーが発生する

ミニ youtube のようなソケット インターフェイスを実装しています。問題は、複数のサブサーバーを簡単に処理できるスレッド化された main_server でサブサーバーからデータを受信するときに発生します。メインでスレッドを作成した後に pthread_join を介してスレッドに参加すると、スレッドの呼び出しは成功し、サブサーバーからデータが受信されますが、マルチスレッド サブサーバー環境を作成するポイント全体が技術的に破棄されます。スレッドに参加しないと、次のエラーが発生します。

pthread_join 経由でスレッドに参加すると、実行が成功し、サブサーバーからデータが正常に受信されます。これがターミナルに表示されるものです。

私のメインサーバーコードは次のとおりです。

私のサブサーバーコードは次のとおりです。

私はこれでかなり長い間立ち往生しており、問題が何であるかを理解できないようです。どんな助けでも大歓迎です!

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

rust - UdpSocket.recv_from は「ファイルの終わり」で失敗しますが、Wireshark で着信パッケージを確認できます

編集者注: このコード例は、Rust 1.0 より前のバージョンのものであり、有効な Rust 1.0 コードではありません。質問で説明されている概念は引き続き有効です。

Rust を使用して torrent スクレイピングを試しています。Wireshark で着信パッケージを確認できますが、recv_from呼び出しは常に を返しError("End of file")ます。これが私のプログラムです:

出力は常に次のとおりです。

ただし、予想される応答が Wireshark に表示されることがわかります。

このパッケージには 16 バイトのペイロードがあり、まさに私の予想どおりです。何がうまくいかないのですか?

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

c - recvfrom は同じフレームを複数回読み取ります

私はSTPパケットをいじり、プログラムの生のソケットを書いてそれらを変更します。eth0 から読み取り、eth1 に送信します。システムは ubuntu 14.10/Kernel 3.somewhat です。Karat を使用して追加のコンピューターでパケットが生成され、Wireshark もこのインターフェイスを実行しています。パケットを挿入し、最初の実行後に recvfrom が停止しませんでした。eth0 から同じパケットを読み取り、eth1 に送信します。デバッグ セッション ??????? 最終版は eth0 からすべてのフレームを読み取り、すべてを転送し、すべての STP を「ユニキャスト トンネル」に配置する必要があります。

私はここにいくつかのコードを入れます: