AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Finde Fehler bei meinem Chat Programm nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Finde Fehler bei meinem Chat Programm nicht

Ein Thema von bl4ckb1rd · begonnen am 17. Jan 2009 · letzter Beitrag vom 18. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#1

Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 16:32
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 Serverthen 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 Serverthen 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 = 'Connectthen 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 = 'Disconnectthen 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.
  Mit Zitat antworten Zitat
blink182

Registriert seit: 19. Jun 2007
126 Beiträge
 
Delphi 5 Standard
 
#2

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 17:57
probier mal beim Connect-Button, nachdem du die IP und den Port zugewiesen hast

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
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#3

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 19:03
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 ;(
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 19:51
Zeig doch mal deinen Quellcode (alle benötigten Dateien!) als Anhang!
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#5

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 22:18
Es ist nur das wichtig was auf der rechten seite ist^^ also der chat 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 -.-
Angehängte Dateien
Dateityp: zip pokerchatserver_207.zip (229,0 KB, 22x aufgerufen)
Dateityp: zip pokerchatclient_155.zip (236,0 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 22:27
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.
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#7

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 22:32
Wie weise ich Ereignis-Methoden dem Objectinspector zu??

Entschuldige falls es eine total dumme Frage ist, aber ich bin noch ein Delphi-Anfänger.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 22:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#9

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 17. Jan 2009, 22:47
sowas passiert immer dann, wenn man fremden code in sein programm einfügt, den komponenten aber nicht sagt, dass er da ist
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 01:39
Zitat von Cyberbob:
sowas passiert immer dann, wenn man fremden code in sein programm einfügt, den komponenten aber nicht sagt, dass er da ist
Sehr lustig finde ich auch, dass man die tatsächlich selbst geschriebenen Passagen sehr leicht rauslesen kann:

formatierter Code mit Einrückung => fremder eingefügter Code

Wohl ein Grund mehr sich das Formatieren anzugewöhnen, dann fällt das Kopieren nicht sofort auf
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz