Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Finde Fehler bei meinem Chat Programm nicht (https://www.delphipraxis.net/127703-finde-fehler-bei-meinem-chat-programm-nicht.html)

bl4ckb1rd 17. Jan 2009 15:32


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.

blink182 17. Jan 2009 16:57

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

bl4ckb1rd 17. Jan 2009 18:03

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 ;(

omata 17. Jan 2009 18:51

Re: Finde Fehler bei meinem Chat Programm nicht
 
Zeig doch mal deinen Quellcode (alle benötigten Dateien!) als Anhang!

bl4ckb1rd 17. Jan 2009 21:18

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 -.-

omata 17. Jan 2009 21:27

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.

bl4ckb1rd 17. Jan 2009 21:32

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.

omata 17. Jan 2009 21:35

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.

Cyberbob 17. Jan 2009 21:47

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

Sir Rufo 18. Jan 2009 00:39

Re: Finde Fehler bei meinem Chat Programm nicht
 
Zitat:

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 :mrgreen:

Wohl ein Grund mehr sich das Formatieren anzugewöhnen, dann fällt das Kopieren nicht sofort auf ;)

bl4ckb1rd 18. Jan 2009 12:10

Re: Finde Fehler bei meinem Chat Programm nicht
 
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 -.-

Cyberbob 18. Jan 2009 13:11

Re: Finde Fehler bei meinem Chat Programm nicht
 
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.

bl4ckb1rd 18. Jan 2009 13:37

Re: Finde Fehler bei meinem Chat Programm nicht
 
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 = 'msg' then begin
    Memo1.lines.add (Nachricht.nick+': '+Nachricht.chat);
  end
  else
  if Nachricht.state <> 'msg' then 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 = 'msg' then begin
    Memo1.Lines.add (Nachricht.nick+ ': '+ Nachricht.chat);
  end;

  if Nachricht.state <> 'msg' then 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??

blink182 18. Jan 2009 18:43

Re: Finde Fehler bei meinem Chat Programm nicht
 
mhm und wo ist jetzt dein Problem, so wie ich das sehe funktioniert doch alles

bl4ckb1rd 18. Jan 2009 20:38

Re: Finde Fehler bei meinem Chat Programm nicht
 
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.

omata 18. Jan 2009 21:04

Re: Finde Fehler bei meinem Chat Programm nicht
 
Zitat:

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:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 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