ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Win32APIコミュのSocketについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
今LINUXからUDPで540X480の動画を5frame per secondで送信して、受信側は,VC++2008のWIN32アプリを作って受信しようとしています。
WireSharkで見ると、送信はできてるみたいなんですが、受信がうまくできないという問題にぶちあたっています。
そこで質問なんですが、ソケットが用意している受信バッファメモリの容量はどのくらいなんでしょうか?
LINUXの側では1フレームのデータ量540x480x2バイト(YCbCr 4:2:2)をsendto()8回で一気に送信しています。はやすぎるでしょうか?0.2秒かけて送信すべきでしょうか?
WINDOWS側での受信も540x480x2バイトをrecv()1回で受信しています。
何回かにわけて受信したほうが良いでしょうか?
以上よろしくお願いいたします。
OSは、WINDOWS XP
言語はVC++2008 WIN32アプリケーションでsocket2.hをインクルードしています。
目的はストリーミング再生です。
以上よろしくお願いします。 

コメント(6)

OSが持ってるバッファのサイズなんか知りませんが、普通はそんなものに依存しないようにプログラミングします。
つまり、recv()の返却値で何バイト受信したかわかるので、予定に達しなければループすれば良いだけです。(もしくはサイズ不明の場合は返却値が0になるまでループ。←こちらのほうが普通)
ありがとうございます。ソケットプログラムの常識がきけてありがたく思っています。
その関数の記述、ネット上にあったので、recievedの型宣言をいれてつかってみましたが、実行したらだまりこんでしまったので、ほっぽっていました。ほかのところに問題がありそうなので、メッセージボックス使ってデバッグしてみます。
以下の質問は、質問する場所を間違えてますがお許しください。Ustreamなどのストリーミングでは、パケットをどばっと送って、だまって、どばっと送って、だまってではなくて、時間的に均等な速度でパケットを送信しているんですよね?LINUX側の送信速度を均等にしてみる方法もためしてみます。
recv が 0 を返すのって、切断された時じゃなかったでしたっけ? ブロッキングされるから、1 バイトでも届かないと止まっちゃったような……
だいぶ前の話なので、うろ覚えですが(=ω=;
MSDN苦手で、めったに読まないのですが、今回は読んだほうがよさそうです。recvが返す値をモニターできるようにがんばって改造してみます。
ネット上を調べてみると、sendto()で送るバイト数がでかすぎるため、受信側でパケット廃棄がおきてるようです。そのため、予定のパケット数にみたないため、受信予定バイト数にみたないため、さらなる受信データをまっているためWIN32アプリがだまりこんでるようです。WINDOWS側のMTUのサイズ以下のバイト数で、LINUX側でsendto()してやれば、うまくいきそうです。ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Win32API 更新情報

Win32APIのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング