Guten Tag,
ich bin gerade etwas am Verzweifeln, weil ich einen kleinen Chat übers Internet programmieren möchte.
was ich bisher schon habe ist ein kleiner Datenaustausch, der bisher nur im eigenen (W)LAN funktioniert, allerdings nicht übers Internet mit der öffentlichen
IP.
Code:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Controls.Presentation, IdCustomTCPServer, IdTCPServer, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdContext, FMX.ScrollBox, FMX.Memo,
FMX.Edit, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Button1: TButton;
IdTCPClient1: TIdTCPClient;
IdTCPServer1: TIdTCPServer;
Edit1: TEdit;
Edit2: TEdit;
Memo1: TMemo;
Edit3: TEdit;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
procedure Button1Click(Sender: TObject);
procedure IdTCPServer1Connect(AContext: TIdContext);
procedure IdTCPServer1Disconnect(AContext: TIdContext);
procedure IdTCPServer1Execute(AContext: TIdContext);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Host := Edit1.Text;
IdTCPClient1.Port := StrToInt(Edit2.Text);
IdTCPClient1.Connect;
if IdTCPClient1.Connected then
begin
IdTCPClient1.IOHandler.WriteLn(Edit3.Text);
IdTCPClient1.Disconnect;
end;
end;
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var
ip:String;
begin
ip:=AContext.Binding.PeerIP;
TThread.Synchronize(nil,
procedure
begin
Memo1.Lines.Add('connect: ' +
ip)
end);
end;
procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
var
ip:String;
begin
ip:=AContext.Binding.PeerIP;
TThread.Synchronize(nil,
procedure
begin
Memo1.Lines.Add('disconnect: ' +
ip)
end);
end;
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
msg:String;
begin
msg:=AContext.Connection.IOHandler.ReadLn;
TThread.Synchronize(nil,
procedure
begin
Memo1.Lines.Add('message: ' + msg)
end);
end;
end.
Ich habe das ganze auch hier schon gepostet (
https://stackoverflow.com/questions/...t-not-only-lan)
Ich habe wie mir geraten wurde Portforwarding in den Routereinstellungen aktiviert, bekomme es allerdings trotzdem nicht hin.. außerdem möchte ich nicht, dass Portforwarding extra aktiviert werden muss, da ich einen stinknormalen Chat programmieren möchte, in dem jeder User als Client und als Server agieren können soll, sodass ich vermeiden möchte, dass der Endnutzer irgendwelche Routerkonfigurationen vornehmen muss, zumal dies ja auf Android Geräten, die mit mobilen Daten unterwegs sind eh wegfällt, da Netzbetreiber sowas in der Regel nicht anbieten oder der User mit erheblichem Mehraufwand konfrontiert wird.
Grundsätzlich möchte ich ein Chatprogramm schreiben, das wie WhatsApp/Telegram oder jedes andere Chatprogramm Nachrichten, Bilder und Sprachmemos senden und empfangen kann, nur möchte ich möglichst keinen zentralen Server haben, sondern die User mithilfe von
IP Adresse und Port gegenseitig connecten lassen. Im schlimmsten Fall würde ich auch einen zentralen Server betreiben, versuche dies aber vorerst zu vermeiden.
Was mir da in den Sinn kam sind die Socket Komponenten TClientSocket und TSeverSocket, die mir in der Delphi 10.3.3 Community Edition allerdings fehlen. Ich habe auch versucht, sie wie in folgendem Link nachzuinstallieren bzw. dynamisch zu nutzen, allerdings funktioniert das bei mir irgendwie nicht:
https://entwickler-ecke.de/topic_TCl...a6ec78d7dadebd.
Kann mir irgendjemand helfen, einen billigen Chat (nicht über
ftp) zu programmieren, der einfach erstmal nur Texte oder Dateien von A nach B und von B nach A schickt, ohne dass man dafür Routereinstelllungen ändern muss? Ich wäre auch mit einer Lösung zufrieden, in der ich einen zentralen Server betreibe, allerdings möchte ich, dass dieser Server auch auf beliebigen anderen Rechnern für ein eigenens Teilnetz laufen kann, also dass jeder Nutzer seinen eigenen Server.exe laufen lassen kann für die Leute, mit denen er chattet, weshalb ich eine Lösung ohne Portforwarding anstrebe.
Ich verwende die Delphi 10.3.3 Community Edition und möchte mit FMX auf Android und Windows Apps bzw. Programme erstellen, die miteinander chatten können.
Vielen Dank schonmal im voraus