聊天室客户端\服务器的编写,已经可以发送字符串,现在想发文件。
比如客户端,Connect上服务器后开启线程用于解析服务器的相应命令如
 private void ServerResponse()//线程体
        {
            byte[] buff = new byte[maxBuff];
            string msg;
            int len;
            if (!Stream.CanRead)
            {
                return;
            }
            while (connectedFlag)
            {
                len = Stream.Read(buff, 0, buff.Length);
                if (len < 1)
                {
                    Thread.Sleep(200);
                    continue;
                }               msg = System.Text.Encoding.Default.GetString(buff, 0, len);
               msg.Trim();               tokens = msg.Split(new Char[] { '|' });
               if (tokens[0] == "CONNO")
               {
                    //登陆成功
                 }
               else if(tokens[1]=="CONNE")
               {
                     //登陆失败
                 }
               else if(...)
               {
                    ...
               }
 现在想想发送文件应该怎么写?
我试着把服务器的发送文件写成这样
 private void SendFile(string filename)
        {
            FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
            Send("FILE|" + filename);
            byte[] bb = new byte[maxBuff];
            int i;                   
            while ((i = fileStream.Read(bb, 0, bb.Length)) != 0)
            {
                Stream.Write(bb, 0, i);
            }
            fileStream.Close(); 
        }客户端添加       else if(token[0]=="FILE")
               {
                    fileStream = new FileStream(tokens[1], FileMode.Create, FileAccess.Write);
                        Thread recFileThread = new Thread(new ThreadStart(ReceiveFile));
                        recFileThread.Start();
               }
  private void ReceiveFile()
        {
            byte[] bytes = new byte[maxBuff];
            int i;
            NetworkStream fstream = tcpClient.GetStream();
            while ((i = fstream.Read(bytes, 0, bytes.Length)) > 0)
            {
                fileStream.Write(bytes, 0, i);
            }
            fileStream.Close();
            fstream.Close();
        }这样写是错的,就是不清楚应该在那里把命令和文件分开。不要意思分数不多,还是希望大家多多帮助!

解决方案 »

  1.   

     else if(token[0]=="FILE") 
                  { 
                        
                  } 
    能不能在这个里面完成程序的接收功能,这样其他程序就不用做什么修改。
    实在不行,从头改也行,希望能得到大家宝贵的意见
      

  2.   

    filestream,文件转成流发过去,再解析
      

  3.   

    修正问题:我之前都是接收1024字节,判断信令足够。现在要加文件传输。现在想法是在信息流byte[]的第一个字节作为区分,如01代表信令,转化为字符串处理。02代表文件,接收成文件。这样的话问题就在于如果定义byte[]的长度,怎样全部接收一次发送过来的信息而且不会把后面的信息也接收过来?