现要通过socket传送一些较大的数据,通过异步方式实现。存在以下问题:
一、原始接收和发送缓冲区大小都定认为1024 编码为Unicode 传输中文没有问题,但只要将缓冲区大小变大,如1024*2,接收到的中文就成为乱码。请问是什么原因?
二、如果不修改缓冲区大小,采用分包传输的方式来传送,那如何能让socket对象多次读取,我代码如下:    ConnectionState state = (ConnectionState)ar.AsyncState;
                Socket client = state.workSocket;
                // Read data from the remote device.
            do{
                int bytesRead = client.EndReceive(ar);
                if (bytesRead > 0)
                {                   
                        // There might be more data, so store the data received so far.
                        state.sb.Append(Encoding.Unicode.GetString(state.buffer, 0, bytesRead));
                        
                        //  Get the rest of the data.
                        client.BeginReceive(state.buffer, 0, ConnectionState.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
                        //Send(client,Analysis(client,state.sb.ToString()));  
                }                
                else
                {
                    // All the data has arrived; put it in response.
                    if (state.sb.Length > 1)
                    {
                        response = state.sb.ToString();
                    }
                    // Signal that all bytes have been received.
                    receiveDone.Set();
                }
            } while (!state.sb.ToString().Contains("#&end&#"));
系统提示错误:只能为每个异步操作调用一次EndReceive。如何解决

解决方案 »

  1.   

    分包发送吧,先发送一个总长度过去,然后就线程循环从客户端socket中select数据,接收到一个数据后,就减掉这个长度,知道把总长度减到0为止
      

  2.   

    每个包的头几位固定格式,比如都叫“abcd”,如果用的tcp那么不用考虑包的顺序问题,直接分包发送即可。
    最好每个包的包头都有一个此包的长度,如2楼所说
      

  3.   

    出现的字符是否 是带有?号 如:您?
    如果是 试着
    把要发送的字段 如 string txt="您好!"+“                     ”;
      

  4.   


    产生的乱码:涓嬪垪鍏充簬foreach璇彞鐨勮〃杩颁腑鍝簺鏄敊璇殑
      

  5.   

    首先你要先测试你的数据string类型转byte[]和byte[]转回string是否正确,之后再看看你的分包程序。
    一般有没有空格和乱码是没有关系的