ソケットのブロッキング接続で、エラーが出て困っています。
エラー内容は「EAccesViolationクラスの例外を生成しました。
Acces violation at address00000013. Read of address」
と言った内容です。
サーバー側のスレッド部分のソースです。
Type
TRead=Class(TServerClientThread)
procedure ClientExecute; override;
End;
implementation
procedure Tread.ClientExecute;
const
bSize:Integer=1000;
var
fStream:TFileStream;
pStream:TWinSocketStream;
buff:Array [0..1000] of Char;
iReadSize:Integer;
begin
//ファイルストリームを作成
fStream:=TFileStream.Create('D:\TEST.bmp',fmCreate);
While (not Terminated) and ClientSocket.Connected Do begin
Try
//ソケットストリームを作成
pStream:=TWinSocketStream.Create(ClientSocket,60000);
Try
If pStream.WaitForData(60000) Then begin
Fillchar(buff,Sizeof(buff),0);
//受信
iReadSize:=pStream.Read(buff,bSize);
If iReadSize=0 Then ClientSocket.Close;
//ファイルに書き込む
fStream.Write(buff,iReadSize);
End;
Finally
pStream.Free;
End;
Finally
fStream.Free;
End;
end;
クライアント側は
fStream:=TFileStream.Create('C:\Send.bmp',fmOpenRead);
pStream:=TWinSocketStream.Create(ClientSocket1.Socket,6000);
pStream.CopyFrom(fStream,0);
fStream.Free;
こんな感じで送ってます。
環境はDelphi6Personalです。
ご教授お願いします。
while文の位置がおかしいのでは?
ループを一周回るとfStreamが解放されるように見えます。
ありがとうございます。
While文の位置を移動してみましたが、やはり同じエラーが出ます。
ツイート | ![]() |