🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72292

Delphi + Lazarus

#72292
From: sebo
Date: Wed, 31 Aug 2011 09:12
111 lines
4149 bytes
Witam!
Nie dawno zacząłem się uczyć gniazd. (Indy 10 komponenty TIdTcpClient i 
TIdTcpServer ). Moim zamierzeniem jest zrobienie aplikacji serwerowej, z tym 
że pod Linuxem, zatem w linuxie pisze w Lazarusie. Kody które działały pod 
windowsami (Delphi) nie chcą działać pod lazarusem. Może ktoś robił podobną 
rzecz i będzie w stanie mi pomóc lub użyczyć kodu. Mój kod prezentuje się 
następująco. Dodam tylko że, raz się, łączy raz nie a raz wywala błąd o 
treści "raised exception class 'External: SIGSEGV'"

Kod
Po stronie Clienta:

Function TSocketF.WyslijSocketem(PlikISciezka:string):integer;
var
fileStream: TFileStream;
ch:integer;
begin
ch:=0;
PolaczZServerem();

fileStream := TFileStream.Create(PlikISciezka, fmOpenRead or fmShareDenyWrite);
try
  try
  USocket.SocketF.Client.IOHandler.writeln('SFILE');
  USocket.SocketF.Client.IOHandler.writeln(ExtractFilename(PlikISciezka));
  USocket.SocketF.Client.IOHandler.LargeStream:=true;
  Filestream.Position:=0;
  USocket.SocketF.Client.IOHandler.Write(filestream,filestream.Size,true);

  finally
  FreeAndNil(FileStream);
  end;

 except
 on E:Exception do
 begin
 glowny.ostrzezenie('Błąd wysyłania pliku');
 ch:=1;
 end;
 end;

 WyslijSocketem:=ch;
 end;

Procedure PolaczZServerem();
begin
try
//if USocket.SocketF.Client.Connected=true then
   USocket.SocketF.Client.Disconnect;
   USocket.SocketF.Client.IOHandler.Free;

   USocket.SocketF.Client.Host:=glowny.DaneFirmy(1).SERWER_HOST;
   USocket.SocketF.Client.Port:=glowny.DaneFirmy(1).SERWER_PORT;
   //USocket.SocketF.IdSSLIOHandlerSocketOpenSSL1.PassThrough:=false;

   USocket.SocketF.Client.Connect;
except
glowny.ostrzezenie('Problem z nawiązaniem połączenia z serwerem PBaza');
end;
end;


PO STRONIE SERVERA

procedure TSocketF.ServerExecute(AContext: TIdContext);
var
Akcja,NazwaPliku,Katalog:string;
FileStream:TFileStream;
begin
  if not USocket.SocketF.Server.Active then
  begin
    USocket.SocketF.server.Active := true;
  end;
    Katalog:=ExtractFilePath(Application.ExeName)+'Pliki\';
 while AContext.Connection.Connected do
begin
try
  Akcja:=AContext.Connection.IOHandler.ReadLn;
      if Akcja='SFILE' then
      begin
      NazwaPliku:=AContext.Connection.IOHandler.ReadLn;
      FileStream := TFileStream.Create(Katalog+NazwaPliku, fmCreate);
      AContext.Connection.IOHandler.LargeStream:=true;
      AContext.Connection.IOHandler.ReadStream(FileStream, -1, False);
      end;

      if Akcja='GFILE' then
      begin
      NazwaPliku:=AContext.Connection.IOHandler.ReadLn;
      fileStream := TFileStream.Create(Katalog+NazwaPliku, fmOpenReadWrite);
      AContext.Connection.IOHandler.LargeStream:=true;
      Filestream.Position:=0;
      AContext.Connection.IOHandler.Write(filestream,filestream.Size,true)
      end;

finally
FreeAndNil(FileStream);
end;
AContext.Connection.Disconnect;


end;
Memo1.Lines.Add('Połączenie od: '+AContext.Connection.Socket.Binding.PeerIP 
+' ; o godzinie: '+timetostr(now)+' ; Akcja: '+Akcja);
end;

Dodałem dodatkowo do komponentu IdTcpServer Bindings 0.0.0.0 port 3500 ( bo na 
takim działam) i zaznaczyłem IPv4

-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Technical Details
Message-ID: <5a65.000003e5.4e5dfaef@newsgate.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.m10r2.onet.pl!niusy.onet.pl

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.m10r2.onet.pl!niusy.onet.pl
From: "sebo" <kamyknr1@interia.pl>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Delphi + Lazarus
Date: Wed, 31 Aug 2011 11:12:15 +0200
Organization: Onet.pl
Lines: 111
Sender: news@newsgate.onet.pl
Message-ID: <5a65.000003e5.4e5dfaef@newsgate.onet.pl>
NNTP-Posting-Host: newsgate.m10r2.onet.pl
Mime-Version: 1.0
X-Trace: newsgate.onet.pl 1314781935 22525 213.180.150.14 (31 Aug 2011 09:12:15 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Wed, 31 Aug 2011 09:12:15 +0000 (UTC)
X-Mailer: http://niusy.onet.pl
X-Forwarded-For: 77.253.222.15, 10.174.28.54
X-User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit