- PR -

Socket.Receiveについて

1
投稿者投稿内容
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2006-06-01 11:14
Visual Studio .NETのSocketクラスを使って通信しているのですが
Socket.Receiveしたときに受信データ(固定長)にばらつきがあります。

調査してみると、送信時にデータが大きいためTCP/IPのほうで分割して送っているようなのですが、分割されたデータの一部が取れていない感じでした。

Socket.Receiveをする前に、受信データの大きさを知ることはできないのでしょうか?

環境
Visual Studio .NET Visual C#
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-01 12:30
引用:

taroさんの書き込み (2006-06-01 11:14) より:

Socket.Receiveをする前に、受信データの大きさを知ることはできないのでしょうか?


受信してはじめて知る事ができるわけだからそりゃ無理でしょ。
あがく場所はそこじゃなくて送信側にあるんじゃないの?

引用:

調査してみると、送信時にデータが大きいためTCP/IPのほうで分割して送っているようなのですが、分割されたデータの一部が取れていない感じでした。


本当に?そんなこと関係なしに指定されたバイトごとしか受信しないはずだが。
受信待ちってどうしてる?接続しっぱなし状態?毎回Listenしてる?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-06-01 12:32

元々そう言うものです。
0 を返すまで Receive を繰り返せばいいでしょう。
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2006-06-01 12:49
ぶさいくろう 様 返答ありがとうございます。

説明不足のところがあり申し訳ありません。

>調査してみると、送信時にデータが大きいためTCP/IPのほうで分割して
>送っているようなのですが、分割されたデータの一部が取れていない感じでした。

Socketクラスでデータを取得する際には1データになっているのですが、TCP/IPの通信の時には、送信側から受信側に送るときに分割されていました。

送信側   TCP/IP     受信側
1データ→ 複数に分割 → 1データ

>本当に?そんなこと関係なしに指定されたバイトごとしか受信しないはずだが。
>受信待ちってどうしてる?接続しっぱなし状態?毎回Listenしてる?

受信待ちは接続しっぱなし状態です。
1

スキルアップ/キャリアアップ(JOB@IT)