在语句:
RecvBytesLength = UdpServer.ReceiveFrom(PictureBuf, offset,  PictureBuf.Length, SocketFlags.None, ref RecvRemoteEp);
中,只要offset不为0,即使有数据来了也一直阻塞在那里;但是offset为0时,有数据来了就不会阻塞。
我把socket设置成非阻塞也不行:
UdpServer.Blocking = false;
发送方法SendTo也和ReceiveFrom出现同样的问题。
难道offset只能用0值不成了???
劳请大家指点先谢谢了!

解决方案 »

  1.   

    你offSet为零,那后面的PictureBuf.Length还是那个数吗?如果没有变的话,超出了数据长度,人家拿什么东西给你接收呢,把PictureBuf.Length这个参数改下测试下。
      

  2.   

    那个PictureBuf.Length是指最大的长度哦~offset为0时,接收到的数据包也远小于PictureBuf的长度,那时候都行的,我一把offset设置为非0(比如1)时就不行了。。
      

  3.   

    Visual Basic(声明) 
    Public Function ReceiveFrom ( _
    buffer As Byte(), _
    offset As Integer, _
    size As Integer, _
    socketFlags As SocketFlags, _
    ByRef remoteEP As EndPoint _
    ) As Integer
     
    Visual Basic(用法) 
    Dim instance As Socket
    Dim buffer As Byte()
    Dim offset As Integer
    Dim size As Integer
    Dim socketFlags As SocketFlags
    Dim remoteEP As EndPoint
    Dim returnValue As IntegerreturnValue = instance.ReceiveFrom(buffer, offset, size, socketFlags, remoteEP)
     
    //C# 
    public int ReceiveFrom (
    byte[] buffer,
    int offset,
    int size,
    SocketFlags socketFlags,
    ref EndPoint remoteEP
    )参数
    buffer
    Byte 类型的数组,它是存储接收到的数据的位置。 offset
    buffer 参数中存储所接收数据的位置。 size
    要接收的字节数。 socketFlags
    SocketFlags 值的按位组合。 remoteEP
    按引用传递的 EndPoint,表示远程服务器。 返回值
    接收到的字节数。 
     
      

  4.   

    谢谢你
    我也看过MSDN上的说明了,不过我碰到的情况并不符合它的说明哦。
    offset除了等于0之外其他的值即使有数据来了也会阻塞