我写了个TCP,和UDP类
发现TCP默认接收的最大缓冲 一次性好象最多只能接收 12000左右个字节
而  UDP默认接收的最大缓冲 一次性好象最多只能接收 28000左右个字节一次性接收多少个字节如何设置?程序里设置么,还是系统里打命令设置
据说一般最好。65535个以下 ,否则路由器容易丢包请问 一次性接收的缓冲区怎么设置 (系统里或者在程序里如何设置)

解决方案 »

  1.   

    private int _buf=8000;//标记一次传输文件数据块的大小,不能超过MTU限制,否则在因特网上的数据发送将不成功00
    [Category("全局设置")]
    [Description("设置UDP每一次传输数据包的大小")]
    [DefaultValue(8000)]
    public int buf 
    {
    set{_buf=value;}
    get{return _buf;}
    }
    然后使用 byte[] 发送数据,发送的时候限制每一次包大小。
    至于接收:如果你发送的包已经限制好,接收就不会出问题。
    byte[] buffer = new byte[buf];
      

  2.   

    晕,我说的是机器内部啊!!!最多接收多少。这东西不是说 你设置一个字节 让他多大就多大。比如你让他收4000,设置byte[] a = new byte[4000]他内部最多让3000,其他的还是空的。
    我说内部!!!
      

  3.   

    这个理论是错的吧,本身SEND发送出去,RECEIVE收的时候是分很多次收的.看网络情况而定,每次接收的大小这个是不能确定的.
      

  4.   

    RECEIVE收的次接收的大小这个是不能确定的.
    但每次接收的最大限制能设置啊!
      

  5.   

    IO读取操作好像有读取的字节数,buffer400读取300的时候,会返回
    一个300,然后检查返回值,不够继续读取,读取的时候也可以选择
    要在buffer的哪个部分开始接收
      

  6.   

    做视频啊,UDP啊。一次数据辆 1.5K,估计数据 70K,郑和包的时间太慢了。效率
    如何设置!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  7.   

    不知道这样如何:[For UDP]
    设置一个不是很大的缓冲区,1024-2048(为了效率啊`~太大很浪费内存的)
    1。找一个结束标志,一般几个字节。重点来了!这几字节很可能会接收的内容重复,
    所以检测这个标志很麻烦。所以接收到这个标志的时间再看后面是不是全是0
    2。如果发送方可以控制。开头用两个到四位标注出整个数据包的长度。
      

  8.   

            Dim mlis As New System.Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, _
                                                      Net.Sockets.SocketType.Dgram, Net.Sockets.ProtocolType.Udp)
            .................
            Dim buffer(1024) As Byte
            Dim svr As New IPEndPoint(IPAddress.Any, 0)
            mlis.BeginReceiveFrom(buffer, 0, 1024, 0, _
                                  svr, New AsyncCallback(AddressOf ReadCallback), state)