![]() |
Chat mit den Sockets
Also :
Ich habe einen Chat mit den Sockets ... die chat übertragung ist nicht p2p sondern peer 2 Server 2 Peer ... sprich Herr a schreibt "hi" zu Herr b ... diese nachricht "hi" wird dann an den Server gesendet und dieser Sendet die dann an Herr B ... Das dies geht muss der Server auch wissen welche Connection ID der Herr B hat ... Der Herr B sendet beim Starten des Clients ne Nachricht an den Server das er on ist und seine ip .... Wie kann ich die ID rausfinden, sodass die nachricht weitergeleitet wird ? so würde die der Server bekommen und dir würde dort vergammeln ... sprich : Ich brauche etwas wo die ganzen Usernamen und ihre IDS gespeichert sind ... Hier mal die Sources : Server:
Delphi-Quellcode:
Clientunit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; ServerSocket1: TServerSocket; Label1: TLabel; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Stop: Integer; messagefromclient: String; ip_7: String; ip_98: String; ip_3: String; ip_2: String; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin ServerSocket1.Active := False; ShowMessage('Server Stopped!'); end; procedure TForm1.Button1Click(Sender: TObject); begin ServerSocket1.Active := True; ShowMessage('Server Started'); end; procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin Label1.Caption := 'Verbindung eines Clienten Bekommen ... '; end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); begin messagefromclient := ServerSocket1.Socket.ReceiveText; CUTIP := Pos('/login', messagefromclient); if CUTIP <> 0 then Delete(CUTIP, 1,7); if cutip = '192.168.0.7' then begin ServerSocket1.Socket.SendText('Chat gestartet!'); end else begin If cutip = '192.168.0.7' then begin ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN ShowMessage(ip_7); end else begin If cutip = '192.168.0.98' then begin ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN ShowMessage(ip_98); end else begin If MessageFromClient = '192.168.0.3' then begin ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN ShowMessage(ip_3); end else begin If MessageFromClient = '192.168.0.2' then begin ip_7 := ;// Hier bekommt die variable die ID ZUGEWIESEN ShowMessage(ip_2); end else begin Serversocket1.Socket.SendText (messagefromclient); End; End; end.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp; type TForm1 = class(TForm) ClientSocket: TClientSocket; Nicklbl: TLabel; Nickname: TEdit; nickbut: TButton; chatlog_memo: TMemo; Nachrichted: TEdit; sendenbut: TButton; connectbut: TButton; Edit1: TEdit; Button1: TButton; Edit2: TEdit; procedure nickbutClick(Sender: TObject); procedure connectbutClick(Sender: TObject); procedure sendenbutClick(Sender: TObject); procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); procedure ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; nicknamevar: string; str: string; ip: String; MEINEIP: String; implementation {$R *.dfm} procedure TForm1.nickbutClick(Sender: TObject); begin //nickbut heißt unser "Nickname setzen" Button // NickName heißt unser Edit-Feld //nicklbl ist der "Nickname" Label nickbut.Enabled := false; Nickname.Enabled := false; nicklbl.Enabled := false; nicknamevar := nickname.Text; //Die restlichen Buttons/Memos/Edits aktivieren chatlog_memo.Enabled := true; Edit1.Enabled := True; Connectbut.Enabled := True; end; procedure TForm1.sendenbutClick(Sender: TObject); begin //sendenbut heißt unser "Senden" Button //nachrichted heißt unsere "Deine Nachricht..." Box //chatlog_memo ist unsere "Chat-Log" Memo if nachrichted.Text = '/help' then begin Chatlog_memo.Lines.Add('SERVER: Command Listing Started !'); Chatlog_memo.Lines.Add('/exit : Beende die Sitzung mit dem Partner'); Chatlog_Memo.Lines.Add('/ip [Address] : Verbinde mit Folgender Client IP'); Chatlog_Memo.Lines.Add('SERVER: Command Listing Stopped'); end else begin try chatlog_memo.Lines.Add(nicknamevar + ' sagt: ' + nachrichted.Text); ClientSocket.Socket.SendText(nicknamevar + ' sagt: ' + nachrichted.Text); except chatlog_memo.Lines.Add('Server Error : Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline'); ShowMessage('Error ! Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline'); end; end; nachrichted.Text := ''; end; procedure TForm1.connectbutClick(Sender: TObject); begin //connectbut heißt unser "Connect" Button //EDIT1 heißt unsere "127.0.0.1" Edit-Box //ClientSocket heißt unser TClientSocket sendenbut.Enabled := True; Nachrichted.Enabled := True; If Edit1.Text = 'Elke' then IP := '192.168.0.7'; If Edit1.Text = 'Michael' then IP := '192.168.0.2'; IF Edit1.Text = 'Nicola' then IP := '192.168.0.98'; IF Edit1.Text = 'Marc' then IP := '192.168.0.3'; ClientSocket.Host := '192.168.0.3'; ClientSocket.Port := 1994; //Verbindung aufbauen: try ClientSocket.Active := true; ClientSocket.Socket.SendText('/ip ' + IP); except chatlog_memo.Lines.Add('Server Error : Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline'); ShowMessage('Error ! Verbindung zum Server gescheitert ! entweder blockt eine Firewall den Port oder er ist Belegt oder der Server ist Offline'); end; chatlog_memo.Lines.Delete(1); Chatlog_memo.Lines.Add('Herzlich Willkommen in FAM-ICQ Sie sind verbunden mit dem Server 192.168.0.3'); ChatLog_Memo.Lines.Add('Tippen Sie /help ein um Die Kommandos zu sehen !') end; procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); begin //in str speichern wir den ankommenden String //und geben es dann in der memo aus. str := ClientSocket.Socket.ReceiveText; If str = '/exit' then begin ShowMessage('Der Partner hat die verbindung Beendet ... bitte starten sie FAMICQ Neu !'); Form1.Close; end else begin chatlog_memo.Lines.Add(str); end; end; procedure TForm1.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket); begin //adresselbl ist das Label "Adresse:" Edit1.Enabled := false; connectbut.Enabled := false; ShowMessage('Sie Wurden Verbunden !'); end; procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket.Socket.SendText('/login' + MEINEIP); end; end. |
Re: Chat mit den Sockets
|
Re: Chat mit den Sockets
Bevor sich hier auch jemand fragt, was nun eigentlich das Problem ist:
![]() mfg Christian P.S.: Was ist eigentlich so schwer daran, Crossposts zu verlineken? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz