procedure TForm1.Button1Click(Sender: TObject);
var
  mystream: TMemoryStream;
  filename:string;      //ini 文件路径
begin
      mystream := TMemoryStream.Create;
      mystream.LoadFromFile('D:\ledtest\test30\22.txt');
      ClientSocket1.Socket.SendStream(mystream);
      mystream.free;
end;我单击 Button1 提示:
project project1.exe raised exception class Eaccessviolation with
message 'access violation at address 000000000 .read of address 00000000各位大哥,这是什么原因啊?
我是错在哪里?
谢谢!

解决方案 »

  1.   

    去掉     mystream.free;
    SendStream后,mystream的拥有者变为Socket
      

  2.   

    1、mystream.seek(0);首先应将内存流定位于0.
    2、   ClientSocket1.Socket.SendStream(mystream);
          mystream.free;
    这两句有问题,你要等待ClientSocket1.Socket.SendStream发送完毕,才可以释放.
      

  3.   

    谢谢两位大哥:
    把流指针定位到开始的位置,或者先倒入文件流再倒入内存流是什么意思?
    那我的程序要怎么改?去掉     mystream.free;
    SendStream后,mystream的拥有者变为Socket那什么时候释放呢?谢谢!
      

  4.   

    当数据发送完毕,会有这个事件发生,
    procedure TForm1.ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);
    beginend;
      

  5.   

    谢谢大哥
    那程序是不是改为:
    var
      Form1: TForm1;
      isjudge:boolean;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      mystream: TMemoryStream;
      filename:string;      //ini 文件路径
    begin
          filename:=ExtractFilePath(paramstr(0))+'22.txt';
          mystream := TMemoryStream.Create;
          mystream.LoadFromFile(filename);
          ClientSocket1.Socket.SendStream(mystream);
          while(isjudge) do
               begin
                     mystream.free;
                     isjudge:=false;
               end;       
    end;procedure TForm1.FormCreate(Sender: TObject);  //连接服务器
    begin
         isjudge:=false;
         try
             ClientSocket1.Open;
         except
             showmessage('连不上服务器');
         end;
    end;procedure TForm1.ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
           isjudge:=true;
    end;end.谢谢!
      

  6.   

    mystream.LoadFromFile(filename);
    mystream.position := 0; //加上这句看看
    ClientSocket1.Socket.SendStream(mystream);
      

  7.   

    “SendStream后,mystream的拥有者变为Socket
    ”,Socket会自动释放MyStream
      

  8.   

    谢谢大哥:
    mystream.position := 0; //加上这句看看
    起什么作用啊?
    现在没有错误了procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
        mystream:TMemoryStream;
    begin
        //len:=Socket.ReceiveLength;
        //Socket.ReceiveBuf(mystream, Len);
    end;我这里怎么接收客户端发来的流
    我想把接收的流再形成文件
    这样的程序是怎么写?
    谢谢!
      

  9.   

    谢谢大哥:
    mystream.position := 0; //加上这句看看
    起什么作用啊?
    现在没有错误了procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
        mystream:TMemoryStream;
    begin
        //len:=Socket.ReceiveLength;
        //Socket.ReceiveBuf(mystream, Len);
    end;我这里怎么接收客户端发来的流
    我想把接收的流再形成文件
    这样的程序是怎么写?
    谢谢!
      

  10.   

    是不是有个 SaveToFile还是什么地啊,好像是这样的mystream.SaveToFile(FileName);