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各位大哥,这是什么原因啊?
我是错在哪里?
谢谢!
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各位大哥,这是什么原因啊?
我是错在哪里?
谢谢!
SendStream后,mystream的拥有者变为Socket
2、 ClientSocket1.Socket.SendStream(mystream);
mystream.free;
这两句有问题,你要等待ClientSocket1.Socket.SendStream发送完毕,才可以释放.
把流指针定位到开始的位置,或者先倒入文件流再倒入内存流是什么意思?
那我的程序要怎么改?去掉 mystream.free;
SendStream后,mystream的拥有者变为Socket那什么时候释放呢?谢谢!
procedure TForm1.ClientSocket1Write(Sender: TObject;
Socket: TCustomWinSocket);
beginend;
那程序是不是改为:
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.谢谢!
mystream.position := 0; //加上这句看看
ClientSocket1.Socket.SendStream(mystream);
”,Socket会自动释放MyStream
mystream.position := 0; //加上这句看看
起什么作用啊?
现在没有错误了procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
mystream:TMemoryStream;
begin
//len:=Socket.ReceiveLength;
//Socket.ReceiveBuf(mystream, Len);
end;我这里怎么接收客户端发来的流
我想把接收的流再形成文件
这样的程序是怎么写?
谢谢!
mystream.position := 0; //加上这句看看
起什么作用啊?
现在没有错误了procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
mystream:TMemoryStream;
begin
//len:=Socket.ReceiveLength;
//Socket.ReceiveBuf(mystream, Len);
end;我这里怎么接收客户端发来的流
我想把接收的流再形成文件
这样的程序是怎么写?
谢谢!