Entwickler-Ecke

Internet / Netzwerk - WinSocket Chat funktioniert nicht!


Novo - Fr 15.06.07 20:07
Titel: WinSocket Chat funktioniert nicht!
Ich habe eien server.exe und eine client.exe, die mit WinSock kommunizieren.
Ich will ein Chat aufbauen, leider kommt kein Text an (vllt nicht mal verbunden...
auch, wenn es nur Localhost ist! localhost sogar!
Es soll bei Form.Activate verbinden...
Es soll bei server.exe das Fenster Form2.show, wenn Client


Delphi-Quelltext
1:
ServerSocket1.Socket.Connections[SelectedIP].SendText('chat');                    

sendet und empfangen wird:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
str: string;
begin
str := ClientSocket1.Socket.ReceiveText;

if (str = 'chat'then begin
Form2.show;


Das Senden des Chat open befehls funktioniert, aber der rest nicht!
Was mache ich falsch?
Ich habe eine Andere ClientSocket auf das Chatfenster gezogen und will mit der Connecten... oder Muss ich die von der HauptUnit nehmen, womit ich auch das Chat open Form Command empfangen habe?


server.exe

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, Unit1;

type
  TForm2 = class(TForm)
    ClientSocket: TClientSocket;
    chatlog_memo: TMemo;
    nachrichted: TEdit;
    sendenbut: TButton;
    procedure nickbutClick(Sender: TObject);
    procedure sendenbutClick(Sender: TObject);
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
var
  Form2: TForm2;
  nickname: string;
implementation

{$R *.dfm}

procedure TForm2.nickbutClick(Sender: TObject);
begin
nickname := 'Test';
chatlog_memo.Enabled := true;
nachrichted.Enabled := true;
sendenbut.Enabled := true;
end;

procedure TForm2.sendenbutClick(Sender: TObject);
begin
chatlog_memo.Lines.Add(nickname + ' sagt: ' + nachrichted.Text);
ClientSocket.Socket.SendText(nickname + ' sagt: ' + nachrichted.Text);
nachrichted.Text := '';
end;

procedure TForm2.ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);
var
str: string;
begin
str := ClientSocket.Socket.ReceiveText;
chatlog_memo.Lines.Add(str);
end;

procedure TForm2.ClientSocketError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
end;

procedure TForm2.FormActivate(Sender: TObject);
var dyndns:string;
begin
ClientSocket.Host := dyndns;
ClientSocket.Port := 1414;
ClientSocket.Active := true;

end;
end.


client.exe

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, Unit1;

type
  TForm3 = class(TForm)
    nicklbl: TLabel;
    nicked: TEdit;
    nickbut: TButton;
    chatlog_memo: TMemo;
    ServerSocket: TServerSocket;
    nachrichted: TEdit;
    sendenbut: TButton;
    procedure nickbutClick(Sender: TObject);
    procedure ServerSocketClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocketClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure sendenbutClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
  nickname: string;
implementation


{$R *.dfm}

procedure TForm3.nickbutClick(Sender: TObject);
begin
nickbut.Enabled := false;
nicked.Enabled := false;
nicklbl.Enabled := false;
nickname := nicked.Text;
end;

procedure TForm3.ServerSocketClientConnect(Sender: TObject;Socket: TCustomWinSocket);

begin
chatlog_memo.Enabled := true;
nachrichted.Enabled := true;
sendenbut.Enabled := true;
end;

procedure TForm3.ServerSocketClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);

begin
ErrorCode := 0;
end;

procedure TForm3.sendenbutClick(Sender: TObject);
var
i: integer;
begin
chatlog_memo.Lines.Add(nickname + ' sagt: ' + nachrichted.Text);
for i:=0 to ServerSocket.Socket.ActiveConnections-1 do begin
ServerSocket.Socket.Connections[i].SendText(nickname + ' sagt: ' + nachrichted.Text);
nachrichted.Text := '';
end;
end;
procedure TForm3.FormActivate(Sender: TObject);
begin
ServerSocket.Port := 1414;
ServerSocket.Active := true;
end;

end.


Narses - Fr 15.06.07 23:26

Moin!

:? Bei dir ist der Client ein Server und der Server ein Client... ? :gruebel: Vermutlich hast du aber auch einfach nur den falschen "Exe-Namen" über den Code geschrieben? :nixweiss:

Aber selbst wenn, dein "Server" hat keine Empfangsmethode, der kann nix von den Clients anzeigen. ;)

Schau mal hier [http://www.delphi-library.de/topic_Minimaler+LANInternetChat+mit+TServerTClientSocket_60744.html], vielleicht kommst du damit weiter. :les: :D

cu
Narses