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 2 von 2     12   
bl4ckb1rd

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

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 13:10
Hab jetzt nochmal das ganze Programm nach einem Tutorial geschrieben, Server-Client Verbindung steht da ja keine Fehlermeldung mehr kommt. Aber wenn sich ein Client an den Server verbindent, kommt keine Nachricht beim Server.

Serverausschnitt:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect (Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: TChatNachricht;
    var I: Integer;
begin
  Memo1.Lines.Add ('Status: Neuer user verbunden');

  Nachricht.nick := 'Server';
  Nachricht.state :='msg';
  Nachricht.chat := 'Willkommen am Chat-Server';
  Socket.SendBuf (Nachricht, SizeOf(Nachricht));

  with ServerSocket1.Socket do begin
    Nachricht.nick := 'Server';
    Nachricht.state :='msg';
    Nachricht.chat := 'Jetzt ' + IntToStr(ActiveConnections) + ' Teilnehmer';
    for I := 0 to ActiveConnections-2 do
      Connections[I].SendBuf (Nachricht, SizeOf(Nachricht))
  end; {with}

  Memo1.Lines.add ('New user connected');

end;

Diese Prozedur wird gar nicht aktiviert, da ja in der Memo-Box nix erscheint.


Beim Clien sollte diese Prozedur aktiviert werde:

Clientausschnitt:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Connect (Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add ('Status: Verbindung wurde erfolgreich hergestellt');
end;

Das wird aber leider auch in der Memo-Box angezeigt. Wenn ich den Clienten nun ohne Server starte kommt sofort ein Fehler. Starte ich alles mit Server so kommt gar nichts -.-
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

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

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 14:11
Dann gib uns doch nochmal den neuen Code!
Eventuell wäre es auch ratsam, wenn du deine Programme Stück für stück schreibst und erst mit schritt 2 weitermachst, wenn schritt 1 auch wirklich richtig arbeitet.
Christian
  Mit Zitat antworten Zitat
bl4ckb1rd

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

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 14:37
Also mein 1ter Schritt ist es die SErver-Kommunikation hinzubekommen.

Hier der aktuelle Code vom 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];
        hand: string[255];
        table: 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;
    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;
    ClientSocket1: TClientSocket;
    procedure sendClick(Sender: TObject);
    procedure connectClick(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure ClientSocket1Read (Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Connect (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;

//---------------------------------------------------------------------------------------------------------

//*********************************** Client READ **********************************************************

procedure TForm1.ClientSocket1Read (Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: TChatNachricht;
begin
  Socket.ReceiveBuf (Nachricht, SizeOf(Nachricht));

  if Nachricht.state = 'msgthen begin
    Memo1.lines.add (Nachricht.nick+': '+Nachricht.chat);
  end
  else
  if Nachricht.state <> 'msgthen begin
    Memo1.lines.add ('Es wurden unbekannte dateien empfangen');
  end;

end;



procedure TForm1.ClientSocket1Connect (Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add ('Status: Verbindung wurde erfolgreich hergestellt');
end;




//---------------------------------------------------------------------------------------------------------


procedure TForm1.connectClick(Sender: TObject);
begin


  if clientsocket1.active = false then begin

    clientsocket1.address := ip.text;
    clientsocket1.port := strtoint(port.text);
    clientsocket1.open;

    ip.enabled := false;
    port.enabled := false;
    nick.enabled := false;
    connect.Caption := 'Disconnect';
  end
  else
  if clientsocket1.active then begin

    clientsocket1.Close;

    ip.enabled := true;
    port.enabled := true;
    nick.enabled := true;
    connect.Caption := 'Connect';
  end;



end;



//------------- Client Send -----------------------------------------------------------------

procedure TForm1.sendClick(Sender: TObject);
var
Nachricht: TChatNachricht;
begin

  if clientsocket1.active then begin

    Nachricht.chat := chat.Text;
    Nachricht.nick := nick.text;
    Nachricht.state := 'chat';
    Nachricht.hand := '0';
    Nachricht.table := '0';

    ClientSocket1.Socket.SendBuf (Nachricht, SizeOf(Nachricht));


    chat.text := '';

    exit;
  end;

  Memo1.lines.add ('Please connect to the server before chatting!');

  chat.Text := '';



end;

end.
Und hier der Code vom 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];
        hand: string[255];
        table: 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;
    ServerSocket1: TServerSocket;
    procedure sendClick(Sender: TObject);
    procedure startserverClick(Sender: TObject);
    procedure exitClick(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead (Sender: TObject; Socket: TCustomWinSocket);

  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


{*******************  ON CLIEN CONNET**************************************   ****************************}

procedure TForm1.ServerSocket1ClientConnect (Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: TChatNachricht;
    var I: Integer;
begin
  Memo1.Lines.Add ('Status: Neuer user verbunden');

  Nachricht.nick := 'Server';
  Nachricht.state :='msg';
  Nachricht.chat := 'Willkommen am Chat-Server';
  Socket.SendBuf (Nachricht, SizeOf(Nachricht));

  with ServerSocket1.Socket do begin
    Nachricht.nick := 'Server';
    Nachricht.state :='msg';
    Nachricht.chat := 'Jetzt ' + IntToStr(ActiveConnections) + ' Teilnehmer';
    for I := 0 to ActiveConnections-2 do
      Connections[I].SendBuf (Nachricht, SizeOf(Nachricht))
  end; {with}

  Memo1.Lines.add ('New user connected');

end;




{*******************  ************************************** ****************************}



procedure TForm1.exitClick(Sender: TObject);
begin
serversocket1.close;
close;
end;

//------------- SERVER ON READ -----------------------------------------------------------------
procedure TForm1.ServerSocket1ClientRead (Sender: TObject; Socket: TCustomWinSocket);
var
Nachricht : TChatNachricht;
begin

  socket.receiveBuf(Nachricht, SizeOf (Nachricht));

  if Nachricht.state = 'msgthen begin
    Memo1.Lines.add (Nachricht.nick+ ': '+ Nachricht.chat);
  end;

  if Nachricht.state <> 'msgthen begin
    Memo1.Lines.add ('Error');
  end;





end;




procedure TForm1.startserverClick(Sender: TObject);
begin

  if serversocket1.active = false then begin
    serversocket1.Port := strtoint (port.text);
    port.enabled := false;
    startserver.caption := 'Stop Server';
    serversocket1.open;
  end
  else
  if serversocket1.active = true then begin
    serversocket1.close;
    port.Enabled := true;
    startserver.caption := 'Start Server';
  end;



end;


//------------- CHAT SENDEN -----------------------------------------------------------------

procedure TForm1.sendClick(Sender: TObject);
var
  Nachricht : TChatNachricht;
  i: Integer;
begin

  if serversocket1.Active then begin
    Nachricht.chat := chat.text;
    chat.text := '';

    Nachricht.state := 'msg';

    Nachricht.nick := 'Server';

      with ServerSocket1.Socket do begin
        for I := 0 to ActiveConnections-1 do
          Connections[I].SendBuf (Nachricht, SizeOf(Nachricht))
      end; {with}

    Memo1.Lines.add ('Server: '+ Nachricht.chat);
  end
  else begin
    Memo1.lines.add ('Error: Server not online!');
    chat.text := '';
  end;



end;

end.

Kann es sein das die sockets aufhören zu arbeiten wenn die Oberfläche zu viele inhalte enthält??
  Mit Zitat antworten Zitat
blink182

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

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 19:43
mhm und wo ist jetzt dein Problem, so wie ich das sehe funktioniert doch alles
  Mit Zitat antworten Zitat
bl4ckb1rd

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

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 21:38
Das problem ist das nix passiert. Es kommt kein fehler und wenn ich auf senden drücke, erscheint niergendswo etwas. Wenn ich alles starte, weiss ich nichtmal ob die verbindung steht, nur als ich es mit einem anderem programm getestet habe, habe ich gesehen das da was ist, aber es läuft nicht wie es laufen soll.
D.H wenn sich wer connected so soll beim server ein nachricht kommen: user connectet (kommt aber nicht). Wenn ich was sende, so sollte die nachricht im chat-fenster erscheinen, passiert auch nicht. Geht was beim verbinden schief: so soll eine fehler-meldung kommen, kommt auch nix.
  Mit Zitat antworten Zitat
omata

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

Re: Finde Fehler bei meinem Chat Programm nicht

  Alt 18. Jan 2009, 22:04
Zitat von omata:
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.
Zitat von omata:
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.
Wo ist das Problem? Mach doch einfach mal fünf Mausklicks, dann läuft das Programm auch.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:31 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