自己写了一个异步传输的例子,可以传输字符串,但不能传输文件,提示这句this.Invoke(OnRevice, new object[] { buffer }); 发生错误 Illegal characters in path. 有没有人帮忙看一下是哪里出现错误了呢?要怎样修改异步传输文件类呢? 之前贴了几个类似的帖子都没人回答,伤心中跪求高手。。 
发送端: FileStream file = new FileStream(@"d:\d.zip", FileMode.Open, FileAccess.Read);
            int ir = 0;
         
            while ((ir = file.Read(buffer,0,buffer.Length)) > 0)
            {
                ClientSocket.Send(buffer);
            }接收端:
        public delegate void OnRevicesString(byte[] by);        OnRevicesString OnRevice;        private Socket socket;        private Socket ClientSocket;        private IPEndPoint ipEndPoint;        private byte[] buffer= new byte[1024];        void StartListen()
        {
                      socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.203.128"), 8090);            socket.Connect(ipEndPoint);            socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(AcceptRec), socket);
        }        private void button1_Click(object sender, EventArgs e)
        {
            StartListen();
        }        void AcceptRec(IAsyncResult ia)
        {
            ClientSocket = (Socket)ia.AsyncState;
          //  int len = ClientSocket.EndReceive(ia);
            OnRevice = new OnRevicesString(Mess);
            this.Invoke(OnRevice, new object[] { buffer });
            socket.BeginReceive(buffer, 0, buffer.Length, 0, new AsyncCallback(AcceptRec), socket);
        }        void Mess(byte[] by)
        {
            byte[] mb = by;
            FileStream file = new FileStream("D:\testD.zip", FileMode.CreateNew, FileAccess.Write);
            file.Write(mb, 0, mb.Length);
            file.Close();
          
        }

解决方案 »

  1.   

    http://www.cnblogs.com/JimmyZhang/category/101698.html
    去看去学
      

  2.   

    应该写为 "D:\\testD.zip"
    但是尽管如此,所谓异步就是根本不等待执行完(甚至根本没有开始)就执行下一个动作了,那么就会出现多个数据接收动作同时并行去操作这个文件,那么接下来你的程序也会有一大堆异常的!
      

  3.   

    哦,我看到了你把 socket.BeginReceive 写在最后,并且前边是同步阻塞的 “this.Invoke”。我还以为(看了你的帖子的标题以为)你是要异步去向文件写数据。你的程序不会并行去写文件。不过,这何必使用this.Invoke?
      

  4.   

    还有,你为什么要把 //  int len = ClientSocket.EndReceive(ia); 给注释掉?唉,你的代码还是很乱的。
      

  5.   


    如果不注释掉这句程序就弹出一个错误了。我按照你的方法把改了路劲,运行后果然如你所说,有异常。。这个testD.zip始终只有1K的大小,呵呵,请问要怎样改进呢?
      

  6.   


    改成BeginInvoke异步能写入吗?