Einzelnen Beitrag anzeigen

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