ブロッキング接続でエラーがでる


遠藤  2007-01-22 01:26:11  No: 24546

ソケットのブロッキング接続で、エラーが出て困っています。
エラー内容は「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です。
ご教授お願いします。


かみづ  2007-01-22 04:58:03  No: 24547

while文の位置がおかしいのでは?
ループを一周回るとfStreamが解放されるように見えます。


遠藤  2007-01-22 10:37:52  No: 24548

ありがとうございます。
While文の位置を移動してみましたが、やはり同じエラーが出ます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加