Thread View: pl.comp.os.linux.programowanie
1 messages
1 total messages
Started by sebo
Wed, 31 Aug 2011 09:12
Delphi + Lazarus
Author: 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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads