winsockのrecv()についての疑問
Posted: 2010年10月20日(水) 20:32
こんばんわ~
winsockのrecv()について疑問があります。
ソケットについては本見ながら勉強中なので知識不足な点があるかもしれません。
recvでデータを受信する際、指定した長さを1回で受信しきれるとは限らない。
と本に書いてあったのですが、具体的な例がその部分は載ってなくてなんとなくしかわかりません。
例えば
送信データの送信長を5と指定した場合、
あ、い、う、え、\0
か、き、く、け、\0
この2つを送信すると
受信側では
あ、い、う
え、\0、か、き、く
け、\0
と受信することもありえる。
ということなのでしょうか?
今はその様に仮定して\0を目安として受信側で送信データを復元するプログラムを書いているのですが、
それならばなぜrecv()で受信するデータの長さをわざわざ指定させるのか疑問に感じました。
1回で指定の長さを受信しきれないならば、結局受信側で送信時に指定した長さに復元しないとダメな気が・・・
それならば何故受信時に受信長を決めさせるのかよくわからなくなりました。
受信長が5のとき、最初に受信したのが受信長が4ならば次は1までしか受信せず5で区切ってくれるとか、
そーゆーことなんですか?
ちょっとした疑問なのでまったく切迫してないのですが、
なんか妙に気になるので、わかる方いましたらお答えいただけるとありがたいです。
winsockのrecv()について疑問があります。
ソケットについては本見ながら勉強中なので知識不足な点があるかもしれません。
recvでデータを受信する際、指定した長さを1回で受信しきれるとは限らない。
と本に書いてあったのですが、具体的な例がその部分は載ってなくてなんとなくしかわかりません。
例えば
送信データの送信長を5と指定した場合、
あ、い、う、え、\0
か、き、く、け、\0
この2つを送信すると
受信側では
あ、い、う
え、\0、か、き、く
け、\0
と受信することもありえる。
ということなのでしょうか?
今はその様に仮定して\0を目安として受信側で送信データを復元するプログラムを書いているのですが、
それならばなぜrecv()で受信するデータの長さをわざわざ指定させるのか疑問に感じました。
1回で指定の長さを受信しきれないならば、結局受信側で送信時に指定した長さに復元しないとダメな気が・・・
それならば何故受信時に受信長を決めさせるのかよくわからなくなりました。
受信長が5のとき、最初に受信したのが受信長が4ならば次は1までしか受信せず5で区切ってくれるとか、
そーゆーことなんですか?
ちょっとした疑問なのでまったく切迫してないのですが、
なんか妙に気になるので、わかる方いましたらお答えいただけるとありがたいです。