Q&A

  • 소켓을 이용하여 화일송신을 할려구 하는데여..
서버 소켓에서..접속된 클라이언트들에게 텍스트 화일을 보내고..
그것을 메모에 뿌려주는 프로그램을 만들어 보는중에 이곳저곳에서
받아온 자료를 기본으로 하여.. 만들어보았는데요..

처음 한번은 되는거 같더니.. 블로킹 어쩌구 저쩌구 에러가 뜨더라고요
고수님들 도와주세요


소켓은 기본제공하는거구요..

서버소켓에서 송신소스입니다.

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.ServerType:=stThreadBlocking;
ServerSocket1.Active:=True;

end;

procedure TForm1.Button2Click(Sender: TObject);
  var
   j:integer;
   TheStram : TWinSocketStream;
   AFile : TfileStream;
  begin
   if OpenDialog1.Execute then
   Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
   for j:= 1 to ServerSocket1.Socket.ActiveConnections do
     begin
       TheStram := TWinSocketStream.Create(ServerSocket1.Socket.Connections[j-1],6000);  //접속된 클라이언 모두모내기
       AFile:= TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
       try
         try
           TheStram.CopyFrom(AFile, AFile.Size);
         except
           ShowMessage('전송에 실패하였습니다.');
         end;
       finally
         TheStram.Free;
         AFile.Free;
       end;
     end;
  end;


클라이언트 소켓에서 수신부분입니다.

procedure TForm1.ClientSocket1Read(Sender: TObject;Socket: TCustomWinSocket);
  var
    TheStream : TWinSocketStream;
    Buffer : array[0..10000] of char;
    AFile : TFileStream;
    Rcvcount : integer;
  begin

    TheStream := TWinSocketStream.Create(Socket,60000);
    AFile := TFileStream.Create('c:output.txt',fmCreate);
    try
      Rcvcount := TheStream.Read(Buffer, High(buffer));
      AFile.Write(buffer,Rcvcount);
      AFile.CopyFrom(TheStream, high(buffer));
      Memo1.Lines.LoadFromFile('c:output.txt');
    finally
      TheStream.Free;
      AFile.Free;
    end;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Host:='210.110.25.151';
ClientSocket1.Port:=8000;
ClientSocket1.Active:=true;
end;
0  COMMENTS