解决方案 »

  1.   

    Socket ..::.Receive 方法 ( array<Byte []()>[], Int32, SocketFlags)  发送反馈
    使用指定的 SocketFlags,从绑定的 Socket 接收指定字节数的数据,并将数据存入接收缓冲区。 
    命名空间:   System.Net.Sockets
    程序集:   System(在 System.dll 中) 
    语法VBC#C++F#JScript以带有颜色区分的格式查看复制到剪贴板打印Public Function Receive ( _
        buffer As Byte(), _
        size As Integer, _
        socketFlags As SocketFlags _
    ) As IntegerPublic Function Receive ( _
    buffer As Byte(), _
    size As Integer, _
    socketFlags As SocketFlags _
    ) As Integer
    public int Receive(
        byte[] buffer,
        int size,
        SocketFlags socketFlags
    )public int Receive(
    byte[] buffer,
    int size,
    SocketFlags socketFlags
    )
    public:
    int Receive(
        array<unsigned char>^ buffer, 
        int size, 
        SocketFlags socketFlags
    )public:
    int Receive(
    array<unsigned char>^ buffer, 
    int size, 
    SocketFlags socketFlags
    )
    member Receive : 
            buffer:byte[] * 
            size:int * 
            socketFlags:SocketFlags -> int member Receive : 
            buffer:byte[] * 
            size:int * 
            socketFlags:SocketFlags -> int 
    参数
    buffer
    类型: array<System ..::.Byte []()>[]
    Byte 类型的数组,它是存储接收到的数据的位置。 size
    类型: System ..::.Int32 
    要接收的字节数。socketFlags
    类型: System.Net.Sockets ..::.SocketFlags 
    SocketFlags 值的按位组合。 返回值
    类型: System ..::.Int32 
    接收到的字节数。如果您使用的是面向连接的协议,则在调用 Receive 之前,必须调用 Connect 以建立一个远程主机连接,或者调用 Accept 以接受传入的连接。 Receive 方法只读取在 Connect 或 Accept 方法中建立的远程主机发送的数据。 如果您使用的是无连接协议,则您也可以使用 ReceiveFrom 方法。 ReceiveFrom 将允许您收到从任何主机传入的数据。 如果没有可读取的数据,则 Receive 方法将一直处于阻止状态,直到数据可用,除非使用 Socket ..::.ReceiveTimeout 设置了超时值。 如果超过超时值, Receive 调用将引发 SocketException。 如果您处于非阻止模式,并且协议堆栈缓冲区中没有可用的数据,则 Receive 方法将立即完成并引发 SocketException。 您可以使用 Available 属性确定是否有数据可以读取。 如果 Available 为非零,请重试接收操作。 如果当前使用的是面向连接的 Socket,则 Receive 方法将读取所有可用的数据,直到达到 size 参数指定的字节数。 如果远程主机使用 Shutdown 方法关闭了 Socket 连接,并且所有可用数据均已收到,则 Receive 方法将立即完成并返回零字节。 如果当前使用的是无连接 Socket,则 Receive 将从您在 Connect 方法中指定的目标地址处读取第一个排队的数据报。 如果您接收到的数据报大于 buffer 参数的大小,则 buffer 将用消息的第一部分填充,多余的数据都会丢失,并且会引发 SocketException。 
      

  2.   

    估计是你在别的地方把socket关闭了,或者其它原因导致的网络连接中断。总之你要退出这段接收数据程序,回到接受连接的地方。
      

  3.   

    校对一下模式,同时看一下receivetimeout的设定
    MSDN上讲的非常清楚
      

  4.   

               catch (Exception ex)                {                    Util.WirteErrorLog(ex.ToString());                    break;                }            }            //删除断开的用户            Util.clientManager.DeleteClient(client);        }应该是这里抛异常之后,删除掉链接了