当前位置:编程学习 > C#/ASP.NET >>

请问,Socket编程,如何设置接收字节数大小


...
...
... //前面代码省略

byte [] receivebytes = new byte [1024 ]; //这个1024是什么意思
int successReceiveBytes = clientSocket.Receive(receivebytes ); 


Receive (Byte[])方法:http://msdn.microsoft.com/zh-cn/library/8s4y8aff.aspx
MSDN的解释是:Receive方法的参数是Byte类型的数组,它是存储接收到的数据的位置。


我想问的是:

new一个byte[]数组,字节数大小1024是自己指定的,如果接收的数据大于1024,岂不是丢失数据吗?
--------------------编程问答--------------------
List<byte> bs=new List<byte>();//无限长度的大容器
int i;
int successReceiveBytes=1024;//缓冲区大小,你喜欢多大就多大,一般不超过2000,因为记得一次发送数据的大小好像 1千45左右,可以发送多次
byte [] receivebytes = new byte [1024 ]; //这个1024 同上
while(receivebytes!=1024)
{
successReceiveBytes = clientSocket.Receive(receivebytes );//这个方法,你看看有没有重载,貌似有设置一次取多少的参数
for(i=0;i<successReceiveBytes ;i++)//临时取的,有多少都导入大容器
{
bs.Add(receivebytes[i]);
}
}
bs.ToArray();//你可能用的上

 


手写的,有错误见谅 --------------------编程问答-------------------- 有http://msdn.microsoft.com/zh-cn/library/ec8ybzs0.aspx

这个就不用楼上的

楼上的和C语言的指针接受那个,思路差不多 --------------------编程问答-------------------- 貌似只接受byte[]类型的 而byte[]又没法不初始化大小。。。
强烈关注。。。泛型List<byte>是否能解决此问题,求教各位达人。 --------------------编程问答-------------------- http://msdn.microsoft.com/zh-cn/library/ec8ybzs0.aspx


果断打开这个链接
--------------------编程问答-------------------- 不会丢失,没有接受的数据会保存在 socket 的缓冲区里面,需要再次调用 receive 接受。 --------------------编程问答--------------------
引用 5 楼  的回复:
不会丢失,没有接受的数据会保存在 socket 的缓冲区里面,需要再次调用 receive 接受。

我就是问,设置的缓冲区大小1024字节数,如果接收的数据大于这个数字,岂不是丢失数据吗 --------------------编程问答--------------------
引用 6 楼  的回复:
引用 5 楼 的回复:

不会丢失,没有接受的数据会保存在 socket 的缓冲区里面,需要再次调用 receive 接受。

我就是问,设置的缓冲区大小1024字节数,如果接收的数据大于这个数字,岂不是丢失数据吗

其实你想知道的应该和我是一个意思吧 就是我3L的提问 --------------------编程问答--------------------
引用 6 楼  的回复:
引用 5 楼 的回复:

不会丢失,没有接受的数据会保存在 socket 的缓冲区里面,需要再次调用 receive 接受。

我就是问,设置的缓冲区大小1024字节数,如果接收的数据大于这个数字,岂不是丢失数据吗


你的设置的是接受数据的缓冲区, 它跟 TCP 协议使用的缓冲区是两码事。 TCP 协议是面向链接的协议,它只会断线,不会丢失数据。 --------------------编程问答-------------------- 还是不明白,恭请高人 --------------------编程问答-------------------- 意思就是我准备给你一个水库的水,你只有一个洗脸盆,
那么你只能一次一盆的端回家

这个盆就是你的1024大小的数组 --------------------编程问答-------------------- 你如果能预测传送文件的大小的话,你可以定义一个容量大一点的byte数组,比如byte [] receivebytes = new byte [1024*1024]; 1M
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,