Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
...ein Internet-/Netzwerkchat realisieren?
spacer
Autor Nachricht
AvadeX
Hält's aus hier

Beiträge: 11
Dabei seit: 12.06.2002
Wohnort: Nähe Koblenz


BeitragVerfasst: Di 18.06.02 12:57  Antworten mit Zitat Beitrag melden
Moderiert von Christian S.: Ein ausführliches Tutorial von Narses findet man hier: www.delphi-library.d...iewtopic.php?t=60744

Um ein kleines Chatprogramm zu erstellen, dass über eine direkte IP Verbindung arbeitet, brauchen wir nur folgende Komponenten:
  • 3 TEdit
  • 1 TClientSocket
  • 1 TServerSocket
  • 3 TButton
  • 2 TMemo
Das Programm soll folgenden Quellcode haben:
ausblenden volle Höhe Delphi-Quelltext markieren
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:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
unit chat;

interface

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

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    ServerSocket1: TServerSocket;
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Edit3: TEdit;
    Memo2: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function getIPs: Tstrings;
type
  TaPInAddr = array[0..10of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt; 
  pptr: PaPInAddr;
  Buffer: array[0..63of Char; 
  I: Integer;
  GInitData: TWSAData; 
begin
  WSAStartup($101, GInitData); 
  Result := TstringList.Create;
  Result.Clear; 
  GetHostName(Buffer, SizeOf(Buffer)); 
  phe := GetHostByName(buffer);
  if phe = nil then Exit; 
  pPtr := PaPInAddr(phe^.h_addr_list); 
  I    := 0;
  while pPtr^[I] <> nil do 
  begin 
    Result.Add(inet_ntoa(pptr^[I]^));
    Inc(I); 
  end
  WSACleanup;
end





procedure TForm1.Button2Click(Sender: TObject);
begin
 ClientSocket1.Address := Edit2.Text;
   ClientSocket1.Active := true;
   Form1.Caption := 'Client';
   end;

procedure TForm1.Button3Click(Sender: TObject);
begin
      Serversocket1.Active := true;
   Form1.Caption := 'Server';
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var s : String;

   begin
   s := Socket.ReceiveText;
   Memo1.Lines.add(s);

   end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var s : String;

   begin
   s := Socket.ReceiveText;
   Memo1.Lines.add(s);

   end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if (Form1.Caption = 'Client'then
   begin

   Clientsocket1.Socket.Sendtext(Edit3.Text + ': ' + Edit1.Text);
   Memo1.Lines.add(Edit3.Text + ': ' + Edit1.Text);
   Edit1.Text := '';

   if Edit1.Text = '' then
   begin
   Edit1.Text := '';
   end;
   end;

   if (Form1.Caption = 'Server'then
   begin

   ServerSocket1.Socket.Connections[0].SendText(Edit3.Text + ': ' + Edit1.Text);
   Memo1.Lines.add(Edit3.Text + ': ' +Edit1.Text);
   Edit1.Text := '';
   if Edit1.Text = '' then
   begin
   Edit1.Text := '';
   end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo2.Lines := GetIps;
end;

end.

Beim starten des Programms wird im Memo deine IP Adresse angezeigt, die du deinem Chatpartner dann mitteilen musst. Diese gibt er dann bei sich im Edit ein! Du brauchst auch seine IP, die du im Edit eingibst. Danach klickst du auf Server und er auf Client und es kann losgehen. Auch einen Nicknamen kannst du dir geben. Das Programm funktioniert sowohl im Internet als auch im Netzwerk!
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star

Beiträge: 1559
Dabei seit: 21.06.2002
Wohnort: Schneeberg

Win 7, Win Vista, Win XP, Win 98
TP7, D7, VS 2010 (VB.net), MsSQL (T-SQL), Edit+ (HTML, CSS, PHP, MySQL)
BeitragVerfasst: Mo 24.06.02 19:03  Antworten mit Zitat Beitrag melden
kannst du auch sagen wie man die buttons beschriften sol und für was die edits und memos sind?

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Hagbard Celine
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 122
Dabei seit: 23.06.2002
Wohnort: Homburg


BeitragVerfasst: Mi 26.06.02 10:35  Antworten mit Zitat Beitrag melden
Chatfix hat folgendes geschrieben:
kannst du auch sagen wie man die buttons beschriften sol und für was die edits und memos sind?


Ich glaube die Belegung ist wie folgt :

Memo 1 : Textboard! Kann ReadOnly gestellt werden!
Memo 2 : Deine IPs! (werden automatisch ermittelt!)

Edit 1 : MessageField (Hier kommt die zu sendende Nachricht rein!)
Edit 2 : IP des Servers
Edit 3 : Nickname (Kannst Du dir bei jeder Message beliebig geben!)

Button 1 : Nachricht senden
Button 2 : Modul als Client verwenden
Button 3 : Modul als Server verwenden
Private Nachricht sendenPosting in privater Nachricht zitieren
Hagbard Celine
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 122
Dabei seit: 23.06.2002
Wohnort: Homburg


BeitragVerfasst: Mi 26.06.02 10:40  Antworten mit Zitat Beitrag melden
Die Server und die Clientkomponente müssen noch auf den selben Port gesetzt werden!
Private Nachricht sendenPosting in privater Nachricht zitieren
overmoon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star

Beiträge: 17
Dabei seit: 10.06.2002
Wohnort: Hamburg


BeitragVerfasst: Mi 26.06.02 18:06 
Titel: ports
Antworten mit Zitat Beitrag melden
Danke für den Zusatz,
dass man die Ports noch einstellen muss,
ich habe mich schon geärgert (gewundert),
warum es nicht funktionieren will ("Socket-Error!").

overmoon :idea:
Private Nachricht sendenPosting in privater Nachricht zitieren
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star

Beiträge: 1559
Dabei seit: 21.06.2002
Wohnort: Schneeberg

Win 7, Win Vista, Win XP, Win 98
TP7, D7, VS 2010 (VB.net), MsSQL (T-SQL), Edit+ (HTML, CSS, PHP, MySQL)
BeitragVerfasst: Do 27.06.02 14:04  Antworten mit Zitat Beitrag melden
Danke

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Hagbard Celine
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 122
Dabei seit: 23.06.2002
Wohnort: Homburg


BeitragVerfasst: Sa 29.06.02 15:04  Antworten mit Zitat Beitrag melden
So ich hab mal weiterprobiert!

Ich habe zwei Clients und ein Server gestartet!
Der Server bekommt alle Messages! Die Antworten gehen aber alle an den zuerst angemeldeten Client bis dieser wieder abgemeldet wird! Dan gehen Sie an den als zweiten angemeldeten Client!

Wie kann ich steuern an welchen Client die Antworten gehen?
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home