<?xml version="1.0" encoding="GB2312"?>
<RESPONSE>
<PAGESIZE>000385</PAGESIZE>
<HEADER>
<COMMAND>LOGIN</COMMAND><QUERYID>9</QUERYID></HEADER>
<BODY>
<STATE>1</STATE><ROLE>12345678,cv2334545</ROLE><LOGINID>1204</LOGINID><CONFIG_VER>1</CONFIG_VER><NEEDDOWN>1</NEEDDOWN><CONFIGINFO>初始企业配置,调试</CONFIGINFO><QUESTIION>-1</QUESTIION><CBCJ>-1</CBCJ></BODY>
</RESPONSE>
         
这个就是socket 传过来的字符 其中pagesize 就是包的大小,我在接收的时候如何先读出这个值从而知道 要接收包的大小(BufferLength)再进行接收。
byte[] InBuffer = new byte[BufferLength];
            string bts = "";
            while (Client.GetStream().DataAvailable)
            {
                Client.GetStream().Read(InBuffer, 0, BufferLength);
                bts += System.Text.Encoding.Default.GetString(InBuffer, 0, BufferLength);
            }

解决方案 »

  1.   

    up,lz的为这个xml发了好几个贴了吧
      

  2.   

    何必要看 PAGESIZE 收到了 </RESPONSE>  说明PAGE全收到了
    就算要加PAGESIZE 也是加在你要传送的bytes[] 前两位
      

  3.   

    NetworkStream 好像不行只有在发送数据的时候先发送一下这个包的大小 然后你根据这个大小接受吧或者发送一个EOF或者特殊的标志表示结束
    就跟POP3协议或者SMTP协议一样
      

  4.   

    在xmpp 协议里看到的一段代码。你用这种方法试验一下看看行不行。
    public XmppSeverConnection(Socket sock) : this()
    {
        m_Sock = sock;
        m_Sock.BeginReceive(buffer, 0, BUFFERSIZE, 0, new AsyncCallback(ReadCallback), null);
    }public void ReadCallback(IAsyncResult ar) 
    {        
        // Retrieve the state object and the handler socket
        // from the asynchronous state object    // Read data from the client socket. 
        int bytesRead = m_Sock.EndReceive(ar);    if (bytesRead > 0) 
        {
            streamParser.Push(buffer, 0, bytesRead);
            
            // Not all data received. Get more.
            m_Sock.BeginReceive(buffer, 0, BUFFERSIZE, 0, new AsyncCallback(ReadCallback), null);
        }
        else
        {
            m_Sock.Shutdown(SocketShutdown.Both);
            m_Sock.Close();
        }
    }
      

  5.   

    先设置个缓冲区 全接收
    然后在根据buffer[0]的大小取出数据
      

  6.   

    我能想到的方案:方法1 : 用一个字符标志,例如'\0' 或者'\r\n'之类 做为一个xml段结束符。这样xml文件不必提供数据大小那个字段。
    只要你读到一个'\0'就说明一个完整的xml数据已经接受完毕方法2 : 在xml的数据段之前加一个 数据头 ,你知道http1.1协议在请求头有Content-Length字段,它能告诉接受方,我的数据区里的数据有多少个字节,接受方在接受完请求头之后,就按那个字节数收取一个完整xml内容。如果楼主的方案已经不能改了,那就比较麻烦,用一个正则表达式匹配<PAGESIZE>数字</PAGESIZE>吧
      

  7.   

    解决方法 先全部读出 然后利用 Moon1(静静的黎明 方法1