![]() |
Finde Fehler bei meinem Chat Programm nicht
Ich hab hier mal versucht einen Chat zu schreiben. Wenn etwas nicht geht sollte ein Error-Code rauskommen. Hat sich der Client erfolgreich connected, so sollte auch eine Meldung kommen das man connected ist. Leider bekomme ich keinen Error-Code und ich sehe auch gar nicht ob sich der client connected hat oder nicht. Nachrichten empfängt der Server keine bzw. der Client sendet keine o.O
Hier habe ich mal den gesammten Code vom Server und vom Client gepostet. Es wäre sehr nette wenn jemand den mal durchgeht und mir meinen Fehler sagen könnte -.- sitze schon 2 Tage davor und find nix... SERVER
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan, ScktComp; type TChatNachricht = Record nick: string[255]; chat: string[255]; state: string[255]; end; type TForm1 = class(TForm) Label1: TLabel; Memo1: TMemo; chat: TEdit; send: TButton; XPManifest1: TXPManifest; GroupBox1: TGroupBox; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Edit2: TEdit; kick: TButton; GroupBox2: TGroupBox; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; GroupBox3: TGroupBox; Edit3: TEdit; Label26: TLabel; Label27: TLabel; port: TEdit; startserver: TButton; kickall: TButton; exit: TButton; Label28: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; ssocket: TServerSocket; procedure sendClick(Sender: TObject); procedure exitClick(Sender: TObject); procedure startserverClick(Sender: TObject); procedure ssocketclientread(Sender: TObject; Socket: TCustomWinSocket); procedure ssocketClientConnect (Sender: TObject; Socket: TCustomWinSocket); procedure ssocketClientDisconnect (Sender: TObject; Socket: TCustomWinSocket); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} {******************* ************************************** ****************************} procedure TForm1.ssocketClientConnect (Sender: TObject; Socket: TCustomWinSocket); var Nachricht: TChatNachricht; var I: Integer; begin Memo1.Lines.Add ('State: New Client has connected'); Nachricht.Nick := 'Server'; Nachricht.state := 'chat'; Nachricht.chat := 'Welcome'; Socket.SendBuf (Nachricht, SizeOf(Nachricht)); with ssocket.Socket do begin Nachricht.Nick := 'Server'; Label3.Caption := IntToStr (ActiveConnections); Nachricht.chat := 'Now ' + IntToStr(ActiveConnections) + ' User'; for I := 0 to ActiveConnections-2 do Connections[I].SendBuf (Nachricht, SizeOf(Nachricht)) end; end; procedure TForm1.ssocketClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add ('State: Client disconnected' + ' - Sockets: ' + IntToStr(ssocket.Socket.ActiveConnections)); Label3.Caption := IntToStr (ssocket.Socket.ActiveConnections-1); end; {******************* ************************************** ****************************} procedure TForm1.startserverClick(Sender: TObject); begin if startserver.caption = 'Stop Server' then begin ssocket.Active := false; label28.Color := clred; label28.Caption := 'Server Offline'; startserver.caption := 'Start Server'; Memo1.lines.SaveToFile('pokerchat-log.txt'); ssocket.Active := false; end else if startserver.caption = 'Start Server' then begin ssocket.active := false; ssocket.Port := strtoint (port.text); label28.Color:= clgreen; label28.Caption := 'Server Online'; startserver.Caption := 'Stop Server'; ssocket.active := true; end; end; procedure TForm1.exitClick(Sender: TObject); begin close; end; //------------- SERVER ON READ ----------------------------------------------------------------- procedure TForm1.ssocketClientRead (Sender: TObject; Socket: TCustomWinSocket); var Nachricht: TChatNachricht; I: Integer; begin Socket.ReceiveBuf (Nachricht, SizeOf(Nachricht)); if (Nachricht.state = 'newuser') then begin Memo1.Lines.Add (Nachricht.Nick + ' has connected'); with ssocket.Socket do begin for i := 0 to ActiveConnections-1 do Connections[I].SendBuf (Nachricht, SizeOf(Nachricht)) end; end; if (Nachricht.state = 'chat') then begin Memo1.Lines.Add (Nachricht.Nick + ': ' + Nachricht.chat); {Send to all} with ssocket.Socket do begin for i := 0 to ActiveConnections-1 do Connections[I].SendBuf (Nachricht, SizeOf(Nachricht)) end; end; end; //------------- CHAT SENDEN ----------------------------------------------------------------- procedure TForm1.sendClick(Sender: TObject); var Nachricht: TChatNachricht; i: integer; begin if (ssocket.active) then begin nachricht.state := 'chat'; nachricht.chat := chat.text; nachricht.nick := 'Server:'; with ssocket.Socket do begin for i := 0 to ActiveConnections-1 do Connections[I].SendBuf (Nachricht, SizeOf(Nachricht)) end; end else begin memo1.lines.add('Not connected!'); end; end; end. CLIENT
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, XPMan, ScktComp; type TChatNachricht = Record nick: string[255]; chat: string[255]; state: string[255]; end; type TForm1 = class(TForm) Label1: TLabel; connect: TButton; ip: TEdit; Label2: TLabel; port: TEdit; Label3: TLabel; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; GroupBox3: TGroupBox; Edit3: TEdit; GroupBox4: TGroupBox; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; sclient: TClientSocket; Button7: TButton; XPManifest1: TXPManifest; Memo1: TMemo; chat: TEdit; send: TButton; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; nick: TEdit; procedure sendClick(Sender: TObject); procedure connectClick(Sender: TObject); procedure Button7Click(Sender: TObject); procedure sclientconnect (Sender: TObject; Socket: TCustomWinSocket); procedure sclientread (Sender: TObject; Socket: TCustomWinSocket); procedure sclientconnecting (Sender: TObject; Socket: TCustomWinSocket); procedure sclienterror (Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure sclientlookup (Sender: TObject; Socket: TCustomWinSocket); procedure sclientdisconnect (Sender: TObject; Socket: TCustomWinSocket); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button7Click(Sender: TObject); begin close; end; //--------------------------------------------------------------------------------------------------------- procedure TForm1.sclientlookup(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add ('State: Searching Server'); end; procedure TForm1.sclientConnecting(Sender: TObject; Socket: TCustomWinSocket); begin Memo1.Lines.Add ('State: Connecting...'); end; procedure TForm1.sclientconnect (Sender: TObject; Socket: TCustomWinSocket); var Nachricht: TChatNachricht; begin Memo1.Lines.Add ('State: Connected'); Nachricht.nick := nick.Text; Nachricht.state := 'newuser'; sclient.Socket.SendBuf (Nachricht, SizeOf(Nachricht)); Memo1.Lines.Add(nick.Text); end; procedure TForm1.sclientError (Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Memo1.Lines.Add ('State: Error ' + IntToStr(ErrorCode)); ErrorCode := 0; end; procedure TForm1.sclientdisconnect(Sender: TObject; Socket: TCustomWinSocket); var Nachricht: TChatNachricht; begin Memo1.Lines.Add ('State: Disconnected'); end; //*********************************** Client READ ********************************************************** procedure TForm1.sclientRead (Sender: TObject; Socket: TCustomWinSocket); var Nachricht: TChatNachricht; begin Socket.ReceiveBuf (Nachricht, SizeOf(Nachricht)); if (Nachricht.state = 'chat') then begin Memo1.Lines.add (Nachricht.nick+': '+Nachricht.chat); end; end; //--------------------------------------------------------------------------------------------------------- procedure TForm1.connectClick(Sender: TObject); var Nachricht :TChatNachricht; begin if connect.caption = 'Connect' then begin sclient.Host := ip.text; sclient.Port := strtoint(port.text); ip.Enabled := false; port.Enabled := false; nick.Enabled := false; sclient.Active := true; //Nachricht.nick := nick.text; //Nachricht.state := 'newuser'; //sclient.Socket.SendBuf (Nachricht, SizeOf(Nachricht)); */ connect.caption := 'Disconnect'; end else if connect.caption = 'Disconnect' then begin sclient.Active := false; ip.Enabled := true; port.Enabled := true; nick.Enabled := true; connect.caption := 'Connect'; Memo1.Lines.SaveToFile('Pokerchat-log.txt'); end; end; //------------- Client Send ----------------------------------------------------------------- procedure TForm1.sendClick(Sender: TObject); var Nachricht: TChatNachricht; begin if (sclient.active) then begin nachricht.state := 'chat'; nachricht.chat := chat.text; nachricht.nick := nick.text; sclient.Socket.SendBuf (Nachricht, SizeOf(Nachricht)); chat.Text := ''; end else begin memo1.lines.add('Not connected!'); end; end; end. |
Re: Finde Fehler bei meinem Chat Programm nicht
probier mal beim Connect-Button, nachdem du die IP und den Port zugewiesen hast
Delphi-Quellcode:
sclient.open;
weiß nicht ob es daran liegen könnte, aber vllt klappt es ja dann ;) MfG blink Edit: was auch sein könnte ist, dass du in deinem IP Feld eine IP stehen hast und kein host? d.h. im ip.text steht 127.0.0.1 und nicht localhost, dann solltest du vllt sclient.address nehmen Edit2: okay am sclient.active lag es nicht...hätte mich auch gewundert |
Re: Finde Fehler bei meinem Chat Programm nicht
Hab jetzt host du address umgeändert, danke aber jetzt bekomme ich eine message box mit socket error 10053 aber eigentlich müsste ja laut code der error code in der memo1 stehen o.O und die server-client und client-server kommunikation geht immer noch nicht ;(
|
Re: Finde Fehler bei meinem Chat Programm nicht
Zeig doch mal deinen Quellcode (alle benötigten Dateien!) als Anhang!
|
Re: Finde Fehler bei meinem Chat Programm nicht
Liste der Anhänge anzeigen (Anzahl: 2)
Es ist nur das wichtig was auf der rechten seite ist^^ also der chat :D rest ist bisher nur Zierde ohne funktionen.
Btw: Es liegt nicht an meinem PC. Ich hab mir mal so ein ähnliches programm gezogen, also nur ein chat mit server, diese funktionieren tadellos. Bei meinem Programm geht es aber immer noch nicht -.- |
Re: Finde Fehler bei meinem Chat Programm nicht
Ich musste die Ereignis-Methoden im Objectinspector zuweisen. Warum sind die vorhanden aber nicht zugewiesen?
Danach habe ich die IP im Client auf 127.0.0.1 gestellt und die Kommunikation funktioniert. |
Re: Finde Fehler bei meinem Chat Programm nicht
Wie weise ich Ereignis-Methoden dem Objectinspector zu??
Entschuldige falls es eine total dumme Frage ist, aber ich bin noch ein Delphi-Anfänger. |
Re: Finde Fehler bei meinem Chat Programm nicht
Indem du im Objectinspector den Tab "Ereignisse" auswählst und dort die Methoden auswählst. Eigentlich legt man sie dort über einen Doppelklick an und füllt sie dann mit Quellcode. Man kann natürlich auch alles selber schreiben und die Methoden dann manuell zuweisen.
|
Re: Finde Fehler bei meinem Chat Programm nicht
sowas passiert immer dann, wenn man fremden code in sein programm einfügt, den komponenten aber nicht sagt, dass er da ist
|
Re: Finde Fehler bei meinem Chat Programm nicht
Zitat:
formatierter Code mit Einrückung => fremder eingefügter Code :mrgreen: Wohl ein Grund mehr sich das Formatieren anzugewöhnen, dann fällt das Kopieren nicht sofort auf ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 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