Autor Beitrag
chickenfigt1989
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Di 16.03.10 16:35 
Hey Hey
Ich will nen ganz Simplen P2P Chat Programmieren wo alle in einen Raum sind und wen ich auf einen Rechtsklick mache sollte kommen: Inhalt aus Memo senden, Kicken, Bannen.
Das alles sollte aber übers Internet Laufen also nicht nur in Heimnetzwerk bei mir Daheim.
Könnt ihr mir Tipps oder Links geben was ich alles brauch und wie ich sowas Realisiere??
MfG
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 16.03.10 16:39 
Jupp, siehe user profile iconNarses Tutorial zu Minimaler LAN/Internet-Chat mit TServer-/TClientSocket. :zwinker:

Ups, P2P völlig überlesen. :roll:
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 16.03.10 16:58 
Das mit dem grundlegenden Tutorial zur Kommunikation untereinander ist schon mal gar nicht so schlecht.

Wenn das läuft, gehst Du weiter, dass du dir mal das Thema DHT und Kademlia anschaust. Von da aus, sollte der Rest recht einfach werden.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mi 17.03.10 11:01 
Hey
Ich habe Narses Tutorial angefangen, aber ich hänge schon bei dem Termchar Tutorial.
In der Pdf steht es so drin:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
TForm1 = class(TForm)
[...]
procedure ParseBuffer;
function GetCmdToken(const StrToken: String): TCmdToken;
procedure Execute(const Command: TCmdToken; Data: TStringList);
[...]
// Empfangspuffer nach Befehlen durchsuchen und dann ausführen
procedure TForm1.ParseBuffer;
var
Data: TStringList; // zum Zerlegen des Empfangspuffers
Current: TCmdToken; // aktuelles Kommando
OutOfArg: Boolean; // Flag zum Abbrechen der Befehlssuche
begin
Data := TStringList.Create;
try
Data.Text := ReceiveBuffer; // Empfangspufferdaten in Pakete zerlegen
OutOfArg := FALSE; // wir nehmen mal an, es sind genug Argumente da
while ( (Data.Count > 0// solange noch Befehle da sind und
and (NOT OutOfArg) ) do begin // die Argumente dafür reichen
// Befehl erkennen (gross/klein egal)
Current := GetCmdToken(UpperCase(Data.Strings[0]));
// ausreichend Argumente dafür da?
if (Data.Count >= Syntax[Current].ArgCount) then
Execute(Current,Data) // ja, dann bearbeiten
else // nein -> auf neue Daten warten...
OutOfArg := TRUE;
end;
// noch nicht verarbeitete Werte wieder in den Puffer zurück
ReceiveBuffer := Data.Text;
finally
Data.Free;
end;
end;


Bei mir ist es so:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp;

const
// Port, an dem der ServerSocket auf Clients wartet
SERVER_PORT = 6786;
 Syntax: Array[TCmdToken] of TCmdSyntax = (
(Text: ''; ArgCount: 1), // NOP
(Text: 'SAID'; ArgCount: 3), // SAID
(Text: 'USER'; ArgCount: 2), // USER
(Text: ''; ArgCount: 1// ERROR; ist nur ein Dummy-Befehl -> kein Text
);
type
TCmdSyntax = record
Text: ShortString; // Kommando-Text
ArgCount: Integer; // Anzahl der Argumente incl. dem Kommando-Text
end;
// bekannte Kommandos aufzählen
TCmdToken = (
cmdNOP = 0// nichts tun (bis D5 das "= 0" weglassen!)
cmdSAID, // Textnachricht ausgeben
cmdUSER, // neue User-Liste
cmdERROR // Fehler, ungültiger Befehl
);

TCmdSyntax = record
Text: ShortString; // Kommando-Text
ArgCount: Integer; // Anzahl der Argumente incl. dem Kommando-Text
end;

TCmdToken = (
cmdNOP = 0// nichts tun (bis D5 das "= 0" weglassen!)
cmdSAID, // Textnachricht ausgeben
cmdUSER, // neue User-Liste
cmdERROR // Fehler, ungültiger Befehl
);

TMyConState = (
mcsOffline, // nicht verbunden
mcsPending, // Verbindungsstatus ändert sich gerade
mcsOnline // verbunden
);

  TForm1 = class(TForm)


Ich bekomme folgende Fehlermeldungen:
[Error] Unit1.pas(12): Undeclared identifier: 'TCmdToken'
[Error] Unit1.pas(12): Undeclared identifier: 'TCmdSyntax'
[Error] Unit1.pas(12): Data type too large: exceeds 2 GB
[Error] Unit1.pas(13): '(' expected but ':' found
[Error] Unit1.pas(13): '..' expected but ')' found
[Error] Unit1.pas(14): '(' expected but ':' found
[Error] Unit1.pas(14): Identifier redeclared: 'ArgCount'
[Error] Unit1.pas(15): '(' expected but ':' found
[Error] Unit1.pas(15): Identifier redeclared: 'ArgCount'
[Error] Unit1.pas(16): '(' expected but ':' found
[Error] Unit1.pas(16): Identifier redeclared: 'ArgCount'
[Error] Unit1.pas(17): Expression expected but ';' found
[Error] Unit1.pas(19): Identifier redeclared: 'TCmdSyntax'
[Error] Unit1.pas(24): Identifier redeclared: 'TCmdToken'
[Error] Unit1.pas(31): Identifier redeclared: 'TCmdSyntax'
[Error] Unit1.pas(36): Identifier redeclared: 'TCmdToken'
[Error] Unit1.pas(37): Identifier redeclared: 'cmdNOP'
[Error] Unit1.pas(38): Identifier redeclared: 'cmdSAID'
[Error] Unit1.pas(39): Identifier redeclared: 'cmdUSER'
[Error] Unit1.pas(40): Identifier redeclared: 'cmdERROR'
[Error] Unit1.pas(201): ')' expected but identifier 'ArgCount' found
[Error] Unit1.pas(213): Undeclared identifier: 'i'
[Error] Unit1.pas(257): 'DO' expected but identifier 'ArgCount' found
[Fatal Error] Client.dpr(5): Could not compile used unit 'Unit1.pas'
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 17.03.10 11:11 
Hast du auch die nötigen Komponenten, Units, Klassen eingebunden? Vergleich mal die Uses-Abschnitte.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mi 17.03.10 11:22 
Also ich habe in den Tutorial nichts gefunden mit uses hinzufügen :(
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 17.03.10 11:24 
user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Also ich habe in den Tutorial nichts gefunden mit uses hinzufügen :(

Wie bitte?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 17.03.10 11:28 
Wie wäre es mal mit etwas Eigeninitiative und/oder Grundlagen lernen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
const
// Port, an dem der ServerSocket auf Clients wartet
SERVER_PORT = 6786;
 Syntax: Array[TCmdTokenof TCmdSyntax = (
(Text: ''; ArgCount: 1), // NOP
(Text: 'SAID'; ArgCount: 3), // SAID
(Text: 'USER'; ArgCount: 2), // USER
(Text: ''; ArgCount: 1// ERROR; ist nur ein Dummy-Befehl -> kein Text
);

type
TCmdSyntax = record
Text: ShortString; // Kommando-Text
ArgCount: Integer; // Anzahl der Argumente incl. dem Kommando-Text
end;
// bekannte Kommandos aufzählen
TCmdToken = // ...


Du verwendest Typen, die du erst später deklarierst.

_________________
We are, we were and will not be.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mi 17.03.10 11:30 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Hast du auch die nötigen Komponenten, Units, Klassen eingebunden? Vergleich mal die Uses-Abschnitte.


Aber ich habe mich Streng ans Tutorial gehalten.
Wie deklarier ich die dan richtig?
MfG
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 17.03.10 11:35 
Erst deklarieren, dann benutzen?

_________________
We are, we were and will not be.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mi 17.03.10 11:38 
user profile iconchickenfigt1989
Weist Du überhaupt was Du da machst! Mehr als C&P und das gleich doppelt und an den falschen stellen kann ich nicht erkennen!

Ich hatte echt gehofft Du steigst neu ein und willst was lernen.
Aber irrtum, Du machst genau so weiter! Schade :(
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mi 17.03.10 11:42 
Ja ich Arbeite das Tutorial durch.
Passt es so?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
const
// Port, an dem der ServerSocket auf Clients wartet
SERVER_PORT = 6786;
 type
TCmdSyntax = record
Text: ShortString; // Kommando-Text
ArgCount: Integer; // Anzahl der Argumente incl. dem Kommando-Text
end;
// bekannte Kommandos aufzählen
TCmdToken = // ...

Syntax: Array[TCmdToken] of TCmdSyntax = (
(Text: ''; ArgCount: 1), // NOP
(Text: 'SAID'; ArgCount: 3), // SAID
(Text: 'USER'; ArgCount: 2), // USER
(Text: ''; ArgCount: 1// ERROR; ist nur ein Dummy-Befehl -> kein Text
);


Ich will es ja lernen und ich lies jetzt schon zum Dritten mal des Tutorial durch aber ich Blick da nicht durch. Ich hab mal ein Screenshot von der Betroffenen stelle im Anhang mit angehängt.
Einloggen, um Attachments anzusehen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 17.03.10 11:56 
user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Passt es so?

Woher sollen wir das wissen? Du sitzt doch davor. Drücke F9 und du weißt es.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 17.03.10 12:18 
user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Ja ich Arbeite das Tutorial durch.


Sorry, aber Copy und Paste auf den Quelltext im tutorial anwenden ist nicht wirklich lernen. Lernen ist wenn man versteht was man macht und das auch selbst umsetzen könnte.

Außerdem, ich find diese Tutorials sind eher für Fortgeschrittene geeignet, nicht für Einsteiger, denn ich z.B. kenn mich bei den Tutorials auch noch nicht ganz aus, und als Einsteiger würd ich mich nicht gerade bezeichnen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 17.03.10 22:17 
Mal abgesehen, dass Tools wie DelForEx eine wahre Wohltat für deinen Quälkot darstellen ;-) (SCNR).

Ganz abgesehen davon, dass das in der Form nicht funktionieren kann. Auch Copy and Paste will gelernt sein.

Vom Meister persönlich:
Psssst: Crashkurs, Crashkurs Reloaded

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.