![]() |
Re: Einen Chat mit den Sockets programmieren
Zitat:
|
Re: Einen Chat mit den Sockets programmieren
hey , hab das gefühl da fehlt was in der PDF kam damit nicht ganz klar,
Client:
Delphi-Quellcode:
unit delchat;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, ScktComp, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent, IdIPWatch; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Label4: TLabel; Label5: TLabel; Label6: TLabel; Timer1: TTimer; ClientSocket1: TClientSocket; ApplicationEvents1: TApplicationEvents; IdIPWatch1: TIdIPWatch; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Delay(time: word); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Nickname,Nachricht:string; implementation {$R *.dfm} procedure TForm1.delay(time:word); var Start: Integer; begin Start:=GetTickCount; while (GetTickCount)-(Start) <= time do Application.ProcessMessages; end; procedure TForm1.FormCreate(Sender: TObject); begin Label6.Caption:=IdIPWatch1.LocalIP; //Damit oben im Fenster schon beim FormCreate die aktuelle IP-Adresse angezeigt wird Button1.Enabled:=false;//Damit man nicht schon vorher draufdrückt Button2.Enabled:=false;// -''- end; procedure TForm1.Button3Click(Sender: TObject); begin Nickname:=Edit3.Text; Button3.Enabled:=false; Edit3.Enabled:=false; Button2.Enabled:=true; end; procedure TForm1.Button2Click(Sender: TObject); begin ClientSocket1.Host:=Edit2.Text; ClientSocket1.Active:=true; Button2.Enabled:=false; Edit2.Enabled:=false; Button1.Enabled:=true; Nachricht:=Edit3.Text+' hat den Raum betreten'; delay(500); ClientSocket1.Socket.SendText(Nachricht); end; procedure TForm1.Button1Click(Sender: TObject); begin if (ClientSocket1.Active=true) and (Edit1.Text<>'') then ClientSocket1.Socket.SendText(NickName+': '+Edit1.Text); Edit1.Text:=''; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label6.Caption:=IdIPWatch1.LocalIP; end; end. Server:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdIPWatch, ScktComp; type TForm1 = class(TForm) Memo1: TMemo; ServerSocket1: TServerSocket; IdIPWatch1: TIdIPWatch; Label2: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin label2.caption:=IdIPWatch1.LocalIP; end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Text:string; i: Integer; begin Text:=Socket.ReceiveText; Memo1.Lines.add(Timetostr(now)+': '+Text); For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin with ServerSocket1.Socket.Connections [I] do if (Connected) then SendText(Text); end; end; end. könntet ihr mir vll . noch sagen was dort noch fehlt damits erstmal funktioniert ?! vielen dank im voraus, und sorry wenn es totaler schwachsinn ist, der dort steht ;) |
Re: Einen Chat mit den Sockets programmieren
wo finde ich di IdIPWatch Komponente???
|
Re: Einen Chat mit den Sockets programmieren
Hi, wollte mal fragen ob jemand laut dem Pdf den Link:
![]() |
Re: Einen Chat mit den Sockets programmieren
Ab und zu sollte man ja auch mal seine ausgetretenen Pfade verlassen. Aber was fange ich denn mit den beiden heruntergeladenen Exen an? Client und Server zeigen beide die gleiche IP an - was soll ich denn im Client in das Edit "IP oder Name des Servers" eintragen? Welche IP? Welchen Namen?
|
Re: Einen Chat mit den Sockets programmieren
Zitat:
Zitat:
mfg Whatever |
Re: Einen Chat mit den Sockets programmieren
Zitat:
Vielen Dank für die Info. Leider kann ich da eingeben was ich will, der Mist funktioniert nicht. Egal, ob mit oder ohne Kaspersky: "Der Server kann nicht gefunden werden" An Einstellungen des Routers kann's ja wohl nicht liegen, da hier doch nur der Client mit dem Server auf dem gleichen PC verbunden werden soll - oder?. PS #1: Warum sind eigentlich Client und Server überhaupt in 2 Programme aufgeteilt? Muss nicht jeder Chat-Teilnehmer immer beide Programme starten? Warum fasst man nicht beide Funktionalitäten in einem Programm zusammen? PS #2: Wir bräuchten hier mal einen Smiley, mit man seinen widerspenstigen PC symbolisch mit einem großen Hammer zertrümmern kann! |
Re: Einen Chat mit den Sockets programmieren
Zitat:
|
Re: Einen Chat mit den Sockets programmieren
Wie genau installiere ich denn IdIPWatch bzw. diese Indykomponenten? Ich habe Delphi 5 da ist kein IdIPWatch enthalten!
|
Re: Einen Chat mit den Sockets programmieren
kann mir jemand helfen?
|
Re: Einen Chat mit den Sockets programmieren
Hi Ghostleader,
pushen solltest Du erst nach 24 Stunden. Schau dir mal diese ![]() Grüße Klaus |
Re: Einen Chat mit den Sockets programmieren
Vielen Dank! Sorry ich hatte nur gesehen das dieser Thread schon über 6 Monate alt ist und das er auf der Portalseite schon von anderen Threads überholt wurde und damit jemand meinen Post sieht hab ich nochmal geschrieben :). Aber ich werd es mir merken - das nächste mal erst nach 24 Stunde.
Mfg Ghost |
Re: Einen Chat mit den Sockets programmieren
Hmm also ich habe Delphi5 und ich dachte das wäre Delphi 2005 aber das was in der Anleitung steht ist komplett anders als meine Sachen.
Ich soll das heruntergeladenes Verzeichnis in den Ornder "lib" einfügen. Ich habe so einen Ordner aber der heißt "Lib" und die Ordner "BDS" und dadrin "3.0" im Screenshot habe ich nicht... (Der 1ste Screenshot von der Anleitung) |
Re: Einen Chat mit den Sockets programmieren
16 Minuten sind aber keine 24 Stunden :warn:. Nichtsdestotrotz, unter Delphi5 müsste das der Ordner C:\Programme\Borland\Delphi5\lib sein (Standard-Verzeichnis).
|
Re: Einen Chat mit den Sockets programmieren
Gut. Wenn ich das jetzt eingefügt habe und dann IndySystem90.dpk öffne erscheint aber nicht dasselbe Fenster wie im Tutorial, es öffnet sich Delphi und ein Programm was ich nicht geschrieben habe. Starten kann man es leider nicht weil da ein Fehler kommt (irgendwas mit "ALIGN")
|
Re: Einen Chat mit den Sockets programmieren
Wieso IndySystem90.dpk? Ich dachte, es geht um Delphi 5.
|
Re: Einen Chat mit den Sockets programmieren
das ist aber der nächste schritt den man machen muss. diese datei da öffnen
|
Re: Einen Chat mit den Sockets programmieren
Du musst das Package öffnen, das zu Deiner Delphi-Version passt. Es macht doch keinen Sinn, das Tutorial für Delphi 2005 sklavisch in Delphi 5 abarbeiten zu wollen.
|
Re: Einen Chat mit den Sockets programmieren
So der Chat ist jetzt fertig allerdings bekomme ich wie so viele andere den (unbeatworteten) fehler:
"Asynchroner Socket-Fehler 10060." Was ist da los?! |
Re: Einen Chat mit den Sockets programmieren
Zitat:
und entsprechend reagieren und eventuell später nochmals einen Verbindungsversuch starten. Grüße Klaus |
Re: Einen Chat mit den Sockets programmieren
Zitat:
|
Re: Einen Chat mit den Sockets programmieren
@Klaus... danke aber ich versteh nicht was ich dagegen tuen kann ;)
gibts da eine möglichkeit das die "gegenstelle" auf den verbindungsaufbau versuch reagieren kann? und wenn ja, wie sieht die als delphi befehl aus? @DieMuhkuh... nein ist mein eigener chat und ich probier ihn selber aus |
Re: Einen Chat mit den Sockets programmieren
Solltest vielleicht mal den Code zeigen, ansonsten könnte die Fehlersuche etwas schwer sein.
|
Re: Einen Chat mit den Sockets programmieren
okay einen moment:
(server und client sind in einem... einzelnd hab ich es auch aber so finde ich es besser - beides hat nichgeklappt -selber fehler)
Delphi-Quellcode:
ist ziemlich viel.
unit pChat3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, DdeMan, IdBaseComponent, IdComponent, IdIPWatch, ExtDlgs, ComCtrls, Buttons, ScktComp, AppEvnts; type TfmChat = class(TForm) MeChatlog: TMemo; BtSenden: TButton; EdSenden: TEdit; EdNickname: TEdit; btOK: TButton; MeWIO: TMemo; BtClose: TButton; MeChatverlauf: TMemo; CbStatus: TComboBox; cbOptionen: TComboBox; MeSupport: TMemo; MeCopyright: TMemo; MeHelp: TMemo; OpenDialog1: TOpenDialog; BtVerlauf: TButton; TmIP: TTimer; IdIPWatch1: TIdIPWatch; PaIP: TPanel; LaIPShow: TLabel; LaIP: TLabel; ImUser: TImage; BitBtn1: TBitBtn; ImStrich: TImage; DateTimePicker1: TDateTimePicker; OpenPictureDialog1: TOpenPictureDialog; ApplicationEvents1: TApplicationEvents; ClientSocket1: TClientSocket; PaServer: TPanel; ServerSocket1: TServerSocket; MeServer: TMemo; LaIPShow2: TLabel; procedure FormCreate(Sender: TObject); procedure btOKClick(Sender: TObject); procedure EdNicknameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EdNicknameClick(Sender: TObject); procedure BtSendenClick(Sender: TObject); procedure BtCloseClick(Sender: TObject); procedure CbStatusChange(Sender: TObject); procedure cbOptionenChange(Sender: TObject); procedure MeSupportDblClick(Sender: TObject); procedure BtVerlaufClick(Sender: TObject); procedure TmIPTimer(Sender: TObject); procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); procedure EdSendenChange(Sender: TObject); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Delay(time: word); procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); private { Private-Deklarationen } public { Public-Deklarationen } end; var fmChat: TfmChat; implementation var Nickname: string; var Nachricht: string; procedure TFmChat.Delay(time:word); var Start: Integer; begin Start:=GetTickCount; while (GetTickCount)-(Start) <= time do Application.ProcessMessages; end; {$R *.dfm} procedure TfmChat.BtCloseClick(Sender: TObject); begin ClientSocket1.Socket.SendText (Nickname + 'hat den Chat verlassen.'); delay(500); MeChatLog.Lines.SaveToFile ('Chat-Log.txt'); ClientSocket1.Close; close; end; procedure TfmChat.btOKClick(Sender: TObject); begin Nickname:= EdNickname.text; Nachricht:= (Nickname + ' hat den Raum betreten.'); delay(500); ClientSocket1.Active:= True; ClientSocket1.Socket.SendText (Nachricht); BtSenden.Enabled:= True; EdSenden.Enabled:= True; MeChatlog.Enabled:= True; Btok.Enabled:= False; CbStatus.Enabled:= True; MeWIO.Lines.Add (Nickname + ' <online>'); MeChatlog.Lines.SaveToFile ('Chat-Log.txt'); end; procedure TfmChat.BtSendenClick(Sender: TObject); begin EdSenden.text:= Nachricht; if (ClientSocket1.Active = True) and (EdSenden.text<>'') then begin ClientSocket1.Socket.SendText (Nickname+ ' : '+ EdSenden.text); end; EdSenden.Text:=''; MeChatverlauf.Lines.LoadfromFile ('Chat-Log.txt'); end; procedure TfmChat.BtVerlaufClick(Sender: TObject); begin OpenDialog1.Filter:= 'Text - Dokumente |*.txt'; OpenDialog1.FileName:= 'Wählen sie ihre Datei...'; OpenDialog1.Execute; MeChatVerlauf.Lines.LoadFromFile (OpenDialog1.Filename); end; procedure TfmChat.CbStatusChange(Sender: TObject); begin if CbStatus.Itemindex = 1 then begin MeChatlog.Lines.Add (Nickname + ' ist nun online.'); MeWIO.Lines.Clear; MeWIO.Lines.Add (Nickname + ' <online>'); end; if CbStatus.Itemindex = 2 then begin MeChatlog.Lines.Add (Nickname + ' ist nun beschäftigt.'); MeWIO.Lines.Clear; MeWIO.Lines.Add (Nickname + ' <Beschäftigt>'); end; if CbStatus.Itemindex = 3 then begin MeChatlog.Lines.Add (Nickname + ' ist nun abwesend.'); MeWIO.Lines.Clear; MeWIO.Lines.Add (Nickname + ' <Abwesend>'); end; if CbStatus.Itemindex = 4 then begin MeChatlog.Lines.Add (Nickname + ' ist nun offline.'); MeWIO.Lines.Clear; MeWIO.Lines.Add (Nickname + '-offline anzeigen-'); end; end; procedure TfmChat.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin end; procedure TfmChat.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin FmChat.Show; MeChatlog.Lines.Add (Socket.ReceiveText); end; procedure TfmChat.cbOptionenChange(Sender: TObject); begin if CbOptionen.itemindex = 0 then begin FmChat.Color:= Clskyblue; MeHelp.Visible:= False; MeSupport.Visible:= False; MeCopyright.Visible:= False; end; if CbOptionen.itemindex = 1 then begin MeHelp.Visible:= True; end else begin MeHelp.Visible:= False; end; if cbOptionen.itemindex = 2 then begin MeSupport.Visible:= True; end else begin MeSupport.Visible:= False; end; if cbOptionen.ItemIndex = 3 then begin MeCopyright.Visible:= True; end else begin MeCopyright.Visible:= False; end; if cbOptionen.Itemindex = 4 then begin OpenPictureDialog1.Filename:= 'Ihre Datei...'; OpenPictureDialog1.Execute; ImUser.Picture.LoadFromFile (OpenPictureDialog1.Filename); end; end; procedure TfmChat.EdNicknameClick(Sender: TObject); begin EdNickname.Clear; end; procedure TfmChat.EdNicknameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin Btok.Enabled:= True; end; procedure TfmChat.EdSendenChange(Sender: TObject); begin if EdSenden.text = 'Server.List' then begin PaServer.Visible:= True; FmChat.Height:= 636; end else begin PaServer.Visible:= False; FmChat.Height:= 285; end; end; procedure TfmChat.FormClose(Sender: TObject; var Action: TCloseAction); begin ServerSocket1.Close; MeChatLog.Lines.SaveToFile('Chat-Log.txt'); end; procedure TfmChat.FormCreate(Sender: TObject); begin LaIpShow2.Caption:= IdIPWatch1.LocalIP; FmChat.Height:= 285; ClientSocket1.Host:= '80.132.196.139' ; ClientSocket1.Active:= True; TmIP.Enabled:= True; BtSenden.Enabled:= False; EdSenden.Enabled:= False; MeChatlog.Enabled:= False; Btok.Enabled:= False; MeChatverlauf.Lines.LoadfromFile ('Chat-Log.txt'); CbStatus.Enabled:= False; CbOptionen.Enabled:= True; MeSupport.Visible:= False; MeCopyright.Visible:= False; MeHelp.Visible:= False; end; procedure TfmChat.MeSupportDblClick(Sender: TObject); begin MeSupport.Visible:= False; end; procedure TfmChat.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); Var Text: String; i: integer; begin Text:=Socket.ReceiveText; MeChatlog.Lines.add(Timetostr(now)+': '+Text); For I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do begin with ServerSocket1.Socket.Connections [I] do if (Connected) then SendText(Text); end; end; procedure TfmChat.TmIPTimer(Sender: TObject); begin LaIP.Caption:=IdIPWatch1.LocalIP; end; end. Me steht für Memo La steht für Label Ed steht für Edit Tm steht für Timer Bt steht für Button... ansonsten einfach nachfragen |
Re: Einen Chat mit den Sockets programmieren
hat da jemand ne ahnung?
|
Re: Einen Chat mit den Sockets programmieren
ist noch jemand für mich da ? :D
|
Re: Einen Chat mit den Sockets programmieren
1. Willst du dafür nicht einen eigenen Thread aufmachen (dann gibt es meist auch mehr Resonanz)
2. Das könnte dem Socket ein wenig zu schnell gehen:
Delphi-Quellcode:
Das Socket sendet ein Ereignis, wenn es fertig zum "schreiben" ist.
ClientSocket1.Active:= True;
ClientSocket1.Socket.SendText (Nachricht); |
AW: Einen Chat mit den Sockets programmieren
Hi,
ich habe den chat programmiert und auf einem rechner funktoniert alles prima. Wenn ich jetzt aber auf einem rechner server und einen client laufen lasse und auf einem anderen rechner(im netzwerk) einen zweiten client habe geht nur der teil, der auf dem rechner mit dem server ist alles prima mit rechner 2 kann ich micht nicht verbinden! Verbindung haben beide - sie sind im selben Heimnetzwerk - und ich habe rechner 1 (der mit server) auch angepingt: ging. Port ist 7777 denke der wird nicht belegt sein... LG Christopher:) |
AW: Einen Chat mit den Sockets programmieren
Die IP-Adresse des zweiten Client hast du wo und wie im Server verarbeitet?
Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 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