char    recvbuff[1024];
int     ret,
        nLeft,
        idx;nLeft = 512;
idx = 0;while (nLeft > 0)
{
    ret = recv(s, &recvbuff[idx], nLeft, 0);
    if (ret == SOCKET_ERROR)
    {
        // Error
    }
    idx += ret;
    nLeft -= ret;
}
《windows网络编程》

解决方案 »

  1.   

    我贴我的错误代码帮我看看哪儿有问题:
    public static Byte[] Receive(Socket socket)
            {
                int size = 1024 * 100;
                int byteCount;
                Byte[] msg = new Byte[size];
                //bool isData = false;
                //socket.ReceiveBufferSize = size;
                int bufslen = 0;            int count = 0;
                byte[] buf = new byte[5 * 1024];            
                    do
                    {try
                {                    byteCount = socket.Receive(buf, SocketFlags.None);
                    }
                        catch (SocketException exception)
                {
                    // Debug.WriteLine("receive flags SocketException error" + exception.ErrorCode);
                    //return messageBody;
                    throw exception;
                }
                catch (Exception exception2)
                {
                    //Debug.WriteLine("receive flags Exception error" + exception2.Message);                // return messageBody;                throw exception2;
                }
                        //if (byteCount != 0)
                        //    isData = true;
                        if (byteCount > 0)
                        {
                            for (int i = 0; i < byteCount; i++)
                            {
                                msg[1024 * count + i] = buf[i];
                            }                        bufslen += byteCount;                        count += 1;                    }                }
                    while (byteCount > 0);
                    //if (bufslen != 0)
                    //    byteCount = socket.Receive(msg, 0, socket.Available, SocketFlags.None);
                    //if (byteCount != 0)
                    return msg      
      }
      

  2.   

    if (byteCount > 0)
                        {
                            for (int i = 0; i < byteCount; i++)
                            {
                                msg[1024 * count + i] = buf[i];
                            }                        bufslen += byteCount;                        count += 1;                    }
    //能确定每次发过和接收的数据都是1024B?(除去最后一次.)
    //如果不是,会出现数据不完整.
      

  3.   

    client socket application Exception error二进制流“0”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。
    在 System.Runtime.Serialization.SerializationException 中第一次偶然出现的“mscorlib.dll”类型的异常
    在 System.Runtime.Serialization.SerializationException 中第一次偶然出现的“MessageCommon.dll”类型的异常
    client socket application Exception error输入流是无效的二进制格式。开始内容(以字节为单位)是: 74-61-53-65-74-3E-0D-0A-20-20-20-20-3C-54-61-62-6C..
      

  4.   

    我也遇到过类似异常“client socket application Exception error输入流是无效的二进制格式。开始内容(以字节为单位)是: 74-61-53-65-74-3E-0D-0A-20-20-20-20-3C-54-61-62-6C..”
    不过是在remoting的服务器回调客户端事件中,也是有些郁闷没有解决
      

  5.   

    我也遇到过类似异常“client socket application Exception error输入流是无效的二进制格式。开始内容(以字节为单位)是: 74-61-53-65-74-3E-0D-0A-20-20-20-20-3C-54-61-62-6C..”
    不过是在remoting的服务器回调客户端事件中,也是有些郁闷没有解决