作者penknife211 (老阙的学生)
看板PangSir
标题[ CN ] socket的read&write
时间Sat Oct 27 17:12:32 2012
请问助教,
socket在传资料的时候,
是不是一个read对应到一个write?
有没有可能一次write的资料分两次来read?
或一次read到两次write的资料?
例如:
1.clientA一次在sock中写入128Byte的资料:
write(sockfd, bufA, 128);
clientB读取socket用的buffer只有64Byte
bufB[64];
read(sockfd, bufB, 64);
--取出bufB的东西--
read(sockfd, bufB, 64);
这样能完整读到clientA传的资料吗?
或是第二次read读不到东西?
2.clientA将128Byte的资料分两次传出:
write(sockfd, bufA, 64);
--更新bufA--
write(sockfd, bufA, 64);
clientB用128Byte的buffer去读(假设此时资料已全部传到B处):
read(sockfd, bufB, 128);
这样能读到完整的资料吗?
还是一定只能读到第一次write的东西?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.217.36
1F:→ a13032002:read应该是一有东西不管长度有没有到就return了? 10/27 22:10
2F:→ a13032002:要确保读到一定的长度似乎要用recv加上MSG_WAITALL(?) 10/27 22:12
3F:推 simonxander:你所举的例子都是可以收到资料的 10/27 22:24
4F:推 simonxander:不过 read 的第3个参数是指"最多"读几个byte 10/27 22:25
5F:推 simonxander:并不是读到几个byte後停止 10/27 22:25
6F:→ penknife211:助教谢谢! 10/28 18:01