我做了一个发送端和一个接收端,发送端发送数据到接收端,发送的是一个rar文件,文件大小为
8,354,875 字节,占用空间为 (8,355,840 字节),接收端接收到的数据 大小和占用空间都是 8,355,840 字节
,打开这个文件提示为
 不可预料的文件压缩末端 ,因为是分断点传输,所以才出现了这个问题,请高手帮忙分析一下是哪里出错了呀?发送端:string FilePath = @"d:\TCP-SOCKET传输.rar";
            
byte[] byy = new byte[1024];
            FileStream fs = new FileStream(FilePath, FileMode.Open);
            int ir = 0;
            while ((ir = fs.Read(byy, 0, byy.Length)) > 0)
            {
                ClientSocket.BeginSend(byy, 0, byy.Length, SocketFlags.None, new AsyncCallback(AsynOver), ClientSocket);
            }
            fs.Close();
            MessageBox.Show("ok");
接收端:public void Length(byte[] RByte)  //这个RByte是委托传过来的值,长度是1024
        { ff = new FileStream(@"d:\abcdefg.rar", FileMode.Append);
                    ff.Write(RByte, 0, RByte.Length);
                 //   ff.Flush();
                                     ff.Close();
}

解决方案 »

  1.   

    能这么写吗 ,rar文件都是有验证的,你以为随便写点东西就是rar了,你还是老老实实用rar自己干吧
      

  2.   

    能这么写吗 ,rar文件都是有验证的,你以为随便写点东西就是rar了,你还是老老实实用rar自己干吧RAR文件结构知道不?
      

  3.   

    你可以这样实现
    rar -argument -parament... 通过 DOS 里的command line 去实现,以前我曾用过 winzip 压缩与解压的...并带有密码操作.
      

  4.   


    异步操作的开始次序是没有规律的,你无法保证传送byy是按照你执行BeginSend的次序进行的。而且就算是按照这个顺序进行的,多个并行的BeginSend它们共用byy,数据也早已经乱了。
      

  5.   

    一个正常的断点传输,要将数据以及数据的控制信息按照自定义协议打包(例如标记好数据在文件中的偏移地址),并且在你的while循环中new一个局部buffer,将要发送的信息拷贝到buffer中来发送消息。
      

  6.   

    不要用beginsend,用send应该是没问题的