LNet Tutorial
-
- Beiträge: 124
- Registriert: Mo 6. Sep 2010, 18:39
- OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
- CPU-Target: Win 7
- Wohnort: Mailand
LNet Tutorial
Hallo zusammen,
da die Frage hier sehr oft vorkommt, hab ich mal ein kleines Einsteiger-Tutorial zu
der LNet-TCP-Komponente geschrieben.
Zielgruppe: Anfänger! (Ist allerdings von 2012, also schon etwas älter.)
Ich hoffe, es hilft hier und da.
Beste Grüße
mintpc
da die Frage hier sehr oft vorkommt, hab ich mal ein kleines Einsteiger-Tutorial zu
der LNet-TCP-Komponente geschrieben.
Zielgruppe: Anfänger! (Ist allerdings von 2012, also schon etwas älter.)
Ich hoffe, es hilft hier und da.
Beste Grüße
mintpc
Zuletzt geändert von mintpc am So 21. Mär 2021, 09:49, insgesamt 1-mal geändert.
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: LNet Tutorial
Seltsam.
Von weitem sieht LNet so aus, als könne der TCP-Server immer nur eine Verbindung gleichzeitig offen haben
Von weitem sieht LNet so aus, als könne der TCP-Server immer nur eine Verbindung gleichzeitig offen haben

-
- Beiträge: 124
- Registriert: Mo 6. Sep 2010, 18:39
- OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
- CPU-Target: Win 7
- Wohnort: Mailand
Re: LNet Tutorial
Richtig. War eigentlich auch nur als rudimentäres Einsteigerbeispiel
für einen Server und einen Client gedacht.
Trotzdem danke für Anmerkung. Ich hab das Tutorial grad noch so erweitert,
dass in einem weiteren Schritt nun auch an mehrere angeschlossene Clients
gesendet werden kann.
Und
ich hab dabei noch einen kleinen Fehler entdeckt.
Ist nun aber korrigiert.
mintpc
für einen Server und einen Client gedacht.
Trotzdem danke für Anmerkung. Ich hab das Tutorial grad noch so erweitert,
dass in einem weiteren Schritt nun auch an mehrere angeschlossene Clients
gesendet werden kann.
Und

Ist nun aber korrigiert.

mintpc
Re: LNet Tutorial
Kannst du vielleicht noch ein Beispielprojekt dranhängen?
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
-
- Beiträge: 124
- Registriert: Mo 6. Sep 2010, 18:39
- OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
- CPU-Target: Win 7
- Wohnort: Mailand
Re: LNet Tutorial
Ich wollte das Tutorial noch etwas ergänzen, in den nächsten Tagen mit ein
bisschen Zeit. Wenn ich das zusammen habe, leg ich auch die Programmbeispiele
dazu.
bisschen Zeit. Wenn ich das zusammen habe, leg ich auch die Programmbeispiele
dazu.
-
- Beiträge: 144
- Registriert: So 22. Aug 2010, 16:06
- OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
- CPU-Target: 64bit
- Wohnort: NRW
- Kontaktdaten:
Re: LNet Tutorial
Schöne Homepage mit schönen Tutorials, danke dafür.
Sieht gut aus, weiter so. Code-Examples wären, wie oben erwähnt, natürlich noch schön
Grüße
Sieht gut aus, weiter so. Code-Examples wären, wie oben erwähnt, natürlich noch schön

Grüße
Re: LNet Tutorial
In der ersten Abfrage eidit1.text<>'' ist ein Leerzeichen zwischen den Anführungsstrichen.
Ist das ein Fehler?
Ist das ein Fehler?
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
Re: LNet Tutorial
Hallo und danke für das aufschlussreiche Tutorial,
Ich arbeite seit kurzem auch gerade mit LNet und habe leider noch eine kleine ungklärte Frage.
Falls der Server gezielt nur "einen" Clienten ansprechen möchte, dessen IP bekannt sei, müsste man das doch in ähnlicher Form tuen:
Oder gibt es eine geschiktere Variante?
Ich arbeite seit kurzem auch gerade mit LNet und habe leider noch eine kleine ungklärte Frage.
Falls der Server gezielt nur "einen" Clienten ansprechen möchte, dessen IP bekannt sei, müsste man das doch in ähnlicher Form tuen:
Code: Alles auswählen
if (sendetext <> '') then
begin
Server.IterReset;
while (Server.IterNext) do
if server.Iterator.Peeraddress='ClientIp' then
Server.SendMessage(sendetext,server.Iterator);
end;
-
- Beiträge: 124
- Registriert: Mo 6. Sep 2010, 18:39
- OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
- CPU-Target: Win 7
- Wohnort: Mailand
Re: LNet Tutorial
Eine bessere Variante kenn ich auch nicht. Höchstens die Verwaltung
der Clients über die Durchnummerierung der Sockets (siehe mein Beispiel
im Tutorial). Ist aber letztlich dasselbe.
Ansonsten hab ich die Programmbeispiele jetzt auch auf der Seite zum
downloaden. Falls noch Fehler oder so auffallen, bitte melden!
http://www.martinjakobs.de/pages/lazarus.php
mintp
der Clients über die Durchnummerierung der Sockets (siehe mein Beispiel
im Tutorial). Ist aber letztlich dasselbe.
Ansonsten hab ich die Programmbeispiele jetzt auch auf der Seite zum
downloaden. Falls noch Fehler oder so auffallen, bitte melden!
http://www.martinjakobs.de/pages/lazarus.php
mintp
Re: LNet Tutorial
Vielen Dank für deine Demo! Ich schreibe gerade an einem Programm mit Netzwerkkommunikation und deine Beispiele werden mir viele Stunden arbeit ersparen! Ich muss dann nur noch ein Protokoll entwickeln über das die Daten hin und her übertragen werden.
Viele Grüße
leosok
Viele Grüße
leosok
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: LNet Tutorial
Für Spiele gibts dann noch die ENET-Bibliothek, für die ich einen Header inzwischen portiert hab. (der allerdings noch unfertig ist [enthält nur funktionen, die ich brauche])
Bei Interesse release ich den. in #fpc scheint man bis jetzt noch nicht auf die Anfrage reagiert zu haben, die Unit in den FPC mit aufzunehmen.
Bei Interesse release ich den. in #fpc scheint man bis jetzt noch nicht auf die Anfrage reagiert zu haben, die Unit in den FPC mit aufzunehmen.
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: LNet Tutorial
Ich hab jetzt jede menge mit lnet gerabeitet und hab aber ein komischen fehler.
Zum aufbau:
Ich hab 1 Programm - das enthält 1 Server - 1 Client und 64 Clienten.
Beim Klicken auf Sever suchen.
Nutzt es die 64 Clienten. gibt jeden ne nummer (192.168.0.1 , .2 , .3 , .4 ...)
und coneccted.
Wenn jetzt das OnConnected ereignis ausgelöst wird wird in ne listbox geschrieben aSocket.PeerAddress;
Danach kann man nen haupt clienten mit der adresse conecten lassen.
so, an einem pc klappt das immer wunderbar - aber wenn ich 2 PC nutze (win7 64 bit und win xp 32 bit (SP3) - Programm jeweils in 32 bit compiliert) . Beide Firewalls aus.
winXP = Server - Win7 client : funktioniert.
Win7 = Server - XP = client : funktioniert nicht.
Allerdigs kommen am Server noch informationen an.
Verbindung zum Clienten mit Ip. ... hergestellt. // OnAccept
Error: Get Error [10054] Eine Vorhandene Verbindung wurde vom Remotehost geschlossen // OnError
//OnDisconecct
Das OnConecct ereignis am Client wird aber nicht ausgelößt...
Kennt sich einer damit aus ?
Danke
Zum aufbau:
Ich hab 1 Programm - das enthält 1 Server - 1 Client und 64 Clienten.
Beim Klicken auf Sever suchen.
Nutzt es die 64 Clienten. gibt jeden ne nummer (192.168.0.1 , .2 , .3 , .4 ...)
und coneccted.
Wenn jetzt das OnConnected ereignis ausgelöst wird wird in ne listbox geschrieben aSocket.PeerAddress;
Danach kann man nen haupt clienten mit der adresse conecten lassen.
so, an einem pc klappt das immer wunderbar - aber wenn ich 2 PC nutze (win7 64 bit und win xp 32 bit (SP3) - Programm jeweils in 32 bit compiliert) . Beide Firewalls aus.
winXP = Server - Win7 client : funktioniert.
Win7 = Server - XP = client : funktioniert nicht.
Allerdigs kommen am Server noch informationen an.
Verbindung zum Clienten mit Ip. ... hergestellt. // OnAccept
Error: Get Error [10054] Eine Vorhandene Verbindung wurde vom Remotehost geschlossen // OnError
//OnDisconecct
Das OnConecct ereignis am Client wird aber nicht ausgelößt...
Kennt sich einer damit aus ?
Danke
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: LNet Tutorial
Habe mir dies auch mal angeschaut, bin allerdings durch die verwenung Meines BS an eine Grenze gelandet . hab dies mal alles auskommentiert erhalte dabei allerdings Keine werte für das Beispiel Clinet III
Code: Alles auswählen
unit WinSocket
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: LNet Tutorial
Bin durch ein Zufall wieder über ein offenes Projekt gestolpert. Habe durch die gelisteten Beispiele auf Client-Server-Kommunikation-mit-LNET-und-Lazarus folgendes Testprogramm zusammengestellt.
Die Zeile habe ich zu sichtzwecke eingefügt. Jesoch scheint die entsprechende Funtion NIE aufgerufen zu werden.
Der Formhalber setzte ich euch hier noch den Code der lfm-file rein.
Wenn jemand ggf den Fehler sieht danke ich schon mal vorab mit dem Wink mit einem Bello
zum Schluß! Only Unix in use...
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
lNetComponents, lNet;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Memo1: TMemo;
Server: TLTCPComponent;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ServerAccept(aSocket: TLSocket);
procedure ServerDisconnect(aSocket: TLSocket);
procedure ServerError(const msg: string; aSocket: TLSocket);
procedure ServerReceive(aSocket: TLSocket);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var Port: Integer;
ServerIP: String;
Verbindungsaufbau: Boolean;
begin
Port := StrToInt(Edit1.Text);
Verbindungsaufbau := Server.Listen(Port);
if verbindungsaufbau then Caption:= 'Hier bin ich' else Caption:='Bin auf Suche';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Server.Disconnect(True);
Memo1.Append('Server wurde Deaktiviert');
end;
procedure TForm1.Button3Click(Sender: TObject);
var sendetext : String;
begin
sendetext := Edit1.text;
if (sendetext <> ' ') then
Server.SendMessage(sendetext);
end;
procedure TForm1.ServerAccept(aSocket: TLSocket);
begin
Label1.Caption:= aSocket.LocalAddress;
Memo1.Append('Verbindung Zum Client mit der IP: ' + aSocket.LocalAddress + ' wurde hergestellt');
end;
procedure TForm1.ServerDisconnect(aSocket: TLSocket);
begin
Memo1.Append('Verbindung zum Client wurde getrennt.');
end;
procedure TForm1.ServerError(const msg: string; aSocket: TLSocket);
begin
Memo1.Append('Fehlermeldung: ' + msg);
end;
procedure TForm1.ServerReceive(aSocket: TLSocket);
var Eingangstext: String;
begin
aSocket.GetMessage(Eingangstext);
Memo1.Append('Eingehende Nachricht: ' + Eingangstext);
end;
end.
Code: Alles auswählen
Label1.Caption:= aSocket.LocalAddress;
Der Formhalber setzte ich euch hier noch den Code der lfm-file rein.
Code: Alles auswählen
object Form1: TForm1
Left = 445
Height = 275
Top = 225
Width = 354
Caption = 'Form1'
ClientHeight = 275
ClientWidth = 354
LCLVersion = '0.9.31'
object Label1: TLabel
Left = 10
Height = 18
Top = 10
Width = 27
Caption = 'Port'
ParentColor = False
end
object Edit1: TEdit
Left = 10
Height = 27
Top = 32
Width = 80
TabOrder = 0
Text = '5000'
end
object Button1: TButton
Left = 10
Height = 29
Top = 64
Width = 124
AutoSize = True
Caption = 'Server &aktivieren'
OnClick = Button1Click
TabOrder = 1
end
object Button2: TButton
Left = 200
Height = 29
Top = 64
Width = 140
AutoSize = True
Caption = 'Server &deaktivieren'
OnClick = Button2Click
TabOrder = 2
end
object Memo1: TMemo
Left = 10
Height = 120
Top = 104
Width = 334
ScrollBars = ssAutoBoth
TabOrder = 3
end
object Edit2: TEdit
Left = 13
Height = 27
Top = 240
Width = 179
TabOrder = 4
Text = 'Edit2'
end
object Button3: TButton
Left = 248
Height = 29
Top = 238
Width = 59
AutoSize = True
Caption = '&senden'
OnClick = Button3Click
TabOrder = 5
end
object Server: TLTCPComponent
Port = 0
OnReceive = ServerReceive
OnError = ServerError
OnDisconnect = ServerDisconnect
OnAccept = ServerAccept
Timeout = 0
ReuseAddress = True
left = 288
top = 112
end
end



zum Schluß! Only Unix in use...
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: LNet Tutorial
Das sieht ziemlich richtig aus.
Das die Prozedure nicht aufgerufen wird scheint wohl daran zu liegen, das es zwar ein Server gibt, allerdings kein Client der darauf zugreift.
Oder gibt es auch noch eine Client-Komponente auf dem Formular (Server und Client ist technisch das gleiche, schmeis einfach noch ne 2te Komponente drauf die du dann mit den Server verbinden lässt...
Das die Prozedure nicht aufgerufen wird scheint wohl daran zu liegen, das es zwar ein Server gibt, allerdings kein Client der darauf zugreift.
Oder gibt es auch noch eine Client-Komponente auf dem Formular (Server und Client ist technisch das gleiche, schmeis einfach noch ne 2te Komponente drauf die du dann mit den Server verbinden lässt...
Code: Alles auswählen
Signatur := nil;