Article View: pl.comp.os.linux.programowanie
Article #72292Delphi + Lazarus
From: sebo
Date: Wed, 31 Aug 2011 09:12
Date: Wed, 31 Aug 2011 09:12
111 lines
4149 bytes
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.plShow 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