我定义了包头:[Type=File][Name=aa.rar]这样的包头,发送时,先发送出这段信息,然后立即发送文件信息,代码如下:
SendMessage("[Type=File][Name=aa.rar]");
do { bytesRead = fs.Read(fileBuffer, 0, fileBuffer.Length);
                    streamToServer.Write(fileBuffer, 0, bytesRead);
totalBytes += bytesRead; // 发送了的字节数

                while (bytesRead > 0);
该怎么进行接收呢?也就是说我接收的时候怎么判断是包头信息呢?我试过第一次接收只接收指定的长度,但是不行,收下来发现包头和文件流是混在一起的根本分不开希望高手告诉我一下很急。

解决方案 »

  1.   

    你发送的时候,不仅要发包头,还要发包头长度啊,那样才知道你数据从哪是文件开始。
    建议包头结构:前四个字节为包头长度(也就是一个Int32的长度),然后接收端解析前四个字节,得到包头长度,然后根据这个长度去读缓冲区的数据,接下来就可以读文件数据了
      

  2.   

    包头长度可以根据你所接收到的包的长度来定义,
     private void ReadSocket(IAsyncResult ar)
            {
                
                Socket s = ar.AsyncState as Socket;            try
                {

    int read = 0;

    if(s.Connected)
    { read = s.EndReceive(ar);

    }
                                   if (read > 0)
                                    {                                    StringBuilder sbl = new StringBuilder();                                     sbl.Append(Encoding.UTF8.GetString(_workingByteArr, 0, read));
                                         ..............
                                    }
                  ........................
               }
         }