C 语言socket 的send数据太大,最大能发送多少?如何分批发送? 35

先谢谢了!不过我是用TCP的,那么TCP怎么弄?它的IP包是最大是多少个字节?网上有些是1500字节,也有些是更大的,我都不知道哪个才是对的?现在我想知道C语言的sock... 先谢谢了!不过我是用TCP的,那么TCP怎么弄?它的IP包是最大是多少个字节?网上有些是1500字节,也有些是更大的,我都不知道哪个才是对的?现在我想知道C语言的socket能发多大?因为我现在发送的数据好大,如果不能,那如何分批发送?希望有个很好的答案!!最好有例子!
我测试了一下,send返回的字节数有801770个字节(是字节数吧!),和send里的规定length一样大,是不是就代表send成功地发送了那么多个字节的数据?

halfyawn 你好! 我的接收方(VB做的程序)一次只能接收8192个字节,而发送方是不断的采集数据并发送的,这样两边根本很难协调,由传感器采集的数据是不断地放在一个buffer里,然后send也可以发送那么多,可接收方再怎么分段接收也接不了那么快,所以我怕数据丢失,因此我想把采集到的数据放在一个大Buffer里,然后send从Buffer里取一部分发送,想请教一下这个Buffer该怎么定义,send那边又该如何写,这样传感器在采集数据(这个数据很庞大^_^),而send在发送,取多少发多少,两者不相干。我是一个初学者,还望多多指教!
展开
 我来答
iverson_49
2010-10-01 · 超过31用户采纳过TA的回答
知道答主
回答量:126
采纳率:100%
帮助的人:90.9万
展开全部
是这样,如果是UDP传输,一般就是1500左右。如果是TCP大小不一定,比如你要传10000,有可能一次传的量是小于10000的任意量。
为了解决这个问题,我建议你用阻塞的SOCKET ,TCP传输,用一个循环接收一个大数据包,每次接到多少字节就将内存下表移动多少,在下次循环中继续接受,直到传完一个整包。
哈欠聊科技
2010-09-21 · TA获得超过422个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:139万
展开全部
如果你SOCKET发的数据报,比如UDP协议, 那么是有最大可发送大小.

这可以用下面这样getsockopt取得最大数据报大小.
----------------------------------------
SOCKET s;
int iSize, iVal, ret;

.....
iSize = sizeof(iVal);
ret = getsockopt(s, SOL_SOCKET, SO_MAX_MSG_SIZE, (char *)&iVal, &iSize);

//-----------------------------------------
如果是TCP,则不需要这样做.

你send返回的字节数有801770个字节(是字节数吧!),和send里的规定length一样大,这可以表明你成功的将这些数据提交底层TCP协议栈去发送。

接收方要是处理成确的,是可以正确无误的收到这些数据的。

//---------------------------------------------

TCP 提供的是可靠的数据流服务 , 这意味着, 接收方,并不需要关心也不应该假定发送方调用了多少次SEND, 它只需要管的是通过若干次RECV把数据从协议栈的缓冲区读取出来。
TCP不必担心丢数据,但发送的时候,SEND要注意处理返回值,如果是阻塞方式,太多的数据会被阻塞, 如果是非阻方式,返回缓冲区满错,然后延时重发。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ariestim
2010-09-17 · TA获得超过285个赞
知道小有建树答主
回答量:403
采纳率:0%
帮助的人:133万
展开全部
..我用的socket一般都是分开发送。。每次就发送byte[65535] 知道发完。用的tcp
byte [] mBuffer = new byte[65535];
while ((mDataSend = mFileStream.Read(mBuffer, 0, 65535)) != 0)
{
socket.Send(mBuffer, mDataSend, SocketFlags.None);
}

接受跟他道理一样的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式