C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: TcpClientでの通信について


(過去ログ 76 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■44877 / inTopicNo.1)  TcpClientでの通信について
  
□投稿者/ december (1回)-(2009/12/22(Tue) 16:33:20)

分類:[C#] 

TcpClientを使用して、ネットワークアプリケーションを作成しています。

サーバーに接続し、データを送受信するところまではできました。

ただ、送信間隔が短い場合なのか条件ははっきりませんが、パケットモニタソフトでキャプチャしたところ、ひとつのイーサネットフレームに対して、複数の送信データが含まれている場合があります。

送信手順としては、
・NetworkStream.Write → NetworkStream.Flush した場合
・非同期で、NetworkStream.BeginWrite → コールバック(コールバック内でNetworkStream.EndWrite) の場合
 (コールバックされたのを確認し、次の送信を行っています。)
どちらとも同様の現象が発生していない。

複数のデータが含まれない状態にしたいのですが、何かわかるようでしたら、ご教授ください。
よろしくお願いします。
引用返信 編集キー/
■44881 / inTopicNo.2)  Re[1]: TcpClientでの通信について
□投稿者/ .SHO (1057回)-(2009/12/22(Tue) 17:11:05)
No44877 (december さん) に返信

> サーバーに接続し、データを送受信するところまではできました。
>
> ただ、送信間隔が短い場合なのか条件ははっきりませんが、パケットモニタソフトでキャプチャしたところ、ひとつのイーサネットフレームに対して、複数の送信データが含まれている場合があります。

受信側で分割されて、ちゃんと受信できてるなら問題ないのでは?

引用返信 編集キー/
■44884 / inTopicNo.3)  Re[2]: TcpClientでの通信について
□投稿者/ december (2回)-(2009/12/22(Tue) 17:33:35)
早速のご回答ありがとうございます。

複数の送信データが含まれるフレームの場合、受信側では、当然ひとまとまりのデータとして受信します。

受信後の電文解析で、複数のデータが含まれている前提で処理できれば良いのですが、今回のターゲットがそういう処理に対応していないので、なんとかして、1フレーム1データという形にしたいのです。

よろしくお願いします。
引用返信 編集キー/
■44886 / inTopicNo.4)  Re[1]: TcpClientでの通信について
□投稿者/ .SHO (1058回)-(2009/12/22(Tue) 18:01:30)
No44877 (december さん) に返信

> ・NetworkStream.Write → NetworkStream.Flush した場合
> ・非同期で、NetworkStream.BeginWrite → コールバック(コールバック内でNetworkStream.EndWrite) の場合
>  (コールバックされたのを確認し、次の送信を行っています。)
> どちらとも同様の現象が発生していない。

この同様の現象が発生していないやり方ではダメなんですか?
引用返信 編集キー/
■44887 / inTopicNo.5)  Re[2]: TcpClientでの通信について
□投稿者/ december (3回)-(2009/12/22(Tue) 18:02:47)
大変失礼しました。。。汗

「どちらとも同様の現象が発生していない。」

「どちらとも同様の現象が発生しています。」の間違いです。
引用返信 編集キー/
■44888 / inTopicNo.6)  Re[3]: TcpClientでの通信について
□投稿者/ 774RR (444回)-(2009/12/22(Tue) 18:12:22)
根本的に1フレーム1データという構造が TCP の仕様と真っ向から矛盾しているので、
・1フレーム1データをやめる
・TCP をやめる
どちらかしかないよ
引用返信 編集キー/
■44889 / inTopicNo.7)  Re[3]: TcpClientでの通信について
□投稿者/ YuO (4回)-(2009/12/22(Tue) 18:14:04)
No44884 (december さん) に返信
> 複数の送信データが含まれるフレームの場合、受信側では、当然ひとまとまりのデータとして受信します。
> 受信後の電文解析で、複数のデータが含まれている前提で処理できれば良いのですが、今回のターゲットがそういう処理に対応していないので、なんとかして、1フレーム1データという形にしたいのです。

TCPはフレームという単位が消えるプロトコルです。
なので,受信側が自分で処理単位に分割する必要があります。

WinsockのFAQになりますが,同じ事なのでURLをここに書いておきます。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/lame-list.html#item20
引用返信 編集キー/
■44891 / inTopicNo.8)  Re[4]: TcpClientでの通信について
□投稿者/ december (4回)-(2009/12/22(Tue) 18:30:26)
ご回答ありがとうございます。

なるほど。プロトコル上、フレーム単位で考えること自体がナンセンスだったのですね。
勉強不足でした。

処理単位に分割する方向で検討してみたいと思います。
みなさま、どうもありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -