Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Chat Funktion (https://www.delphipraxis.net/117683-chat-funktion.html)

Counter909 23. Jul 2008 12:41


Chat Funktion
 
HI


also ich hab in meinem Projekt einen kleinen Chat zwischen nur ZWEI Leuten:

folgendes hab ich gemacht:

Mensch 1 (Server) : startet den Serversocket
Mensch 2 (client) : verbinden sich mit Clientsocket

---> Nachricht: erfolgreich verbunden

soweit alles klar :-)


jetzt gibt es auf beiden Seiten ein MemoFeld und ein Senden Button:

Mensch1 : serversocket1.socket.sendtext ( button.text )
Mensch2 : empfangen := clientsocket1.socket.receivetext
memo1.lines.add ( empfangen ) ;


In dem Moment wo der Text vom Mensch1 abgsand wird, kommt die Fehlermeldung:

http://img501.imageshack.us/img501/3...7231341cf1.jpg
Da steht ja, dass er nicht verbunden ist, aber hab vor die Connection z.B mit einer showmessage geprüft. da sagt er dann, dass er verbunden ist
hoffe das ist verständlich geworden, ansonst fragt gerne nach :-)

vielen dank

mfg
counter

Die Muhkuh 23. Jul 2008 12:42

Re: Chat Funktion
 
Zeig mal den Code bitte.

Counter909 23. Jul 2008 12:48

Re: Chat Funktion
 
welchen willst du denn genau haben ?

sind ja quasi zwei unterschiedliche programme


also das ist vom send-button


Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var text:string;
begin
text:=edit1.Text;
memo1.Lines.Add('Client: '+text+'');
form2.ServerSocket1.Socket.SendText(edit1.text);

mkinzler 23. Jul 2008 12:50

Re: Chat Funktion
 
Wenn dein Auto kaputt ist, bringst du dann auch immer dein Fahrrad in die Werkstatt? Wie soll man die helfen, wenn du die benötigten Details für dich behältst :gruebel:

Mikescher 23. Jul 2008 12:55

Re: Chat Funktion
 
Am besten lädst du mal beide Quellcodes vollständig hoch dann kann man dir auch schon mal besser helfen :zwinker:

Counter909 23. Jul 2008 13:00

Re: Chat Funktion
 
SERVER:

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
serversocket1.Active := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
serversocket1.Active:= true;
panel1.Color:=cllime;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
serversocket1.Active:= false;
panel1.Color:=clred;
end;

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

procedure TForm1.Button3Click(Sender: TObject);
begin
ShellExecute(Handle, 'OPEN', 'http://wieistmeineip.de', nil, nil, SW_SHOWNORMAL)
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var text:string;
begin
 text:= form1.ClientSocket1.socket.ReceiveText ;
 memo1.Lines.Add('Host: '+text+'');
end;

end.


CLIENT:


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

 clientsocket1.Address:= edit1.Text;
 clientsocket1.port := strtoint(edit2.Text)//der richtige port ist auf der anderen seite eingestellt
 
 clientsocket1.Active:= true;
 if clientsocket1.Active = true then button1.Font.Color:= cllime;
 
end;

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

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  edit1.Color:= cllime;
  groupbox1.Enabled:=true;              // wird grün, weil er connected ist
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  edit1.Color:= clyellow;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
   ErrorCode:= 0;
   MessageDlg('Cannot connect to Server!', mtError, [mbOk], 0);
   edit1.Color:= clwindow;
end;

procedure TForm1.ChatClick(Sender: TObject);
var text:string;
begin
text:=edit5.Text;
memo1.Lines.Add('Client: '+text+'');
form1.ServerSocket1.Socket.SendText(edit5.text);
end.

mkinzler 23. Jul 2008 13:02

Re: Chat Funktion
 
Der Verbindungsaufbau fehlt aber trotzdem. Machst du dass im OI?

Counter909 23. Jul 2008 13:05

Re: Chat Funktion
 
nein....active := true ??

delphis spassbremse 23. Jul 2008 13:10

Re: Chat Funktion
 
Hallo,

das Problem ist folgendes:

Du kannst nicht mit dem Serversocket einfach ein sendText() benutzen.
Der weiß gar nicht, wohin....

versuchs mal damit:

Delphi-Quellcode:
procedure message_broadcast(socket: TServerWinSocket; text: String);
var i: Integer;
begin
  for i := 0 to socket.ActiveConnections - 1 do
  begin
    socket.Connections[i].SendText(text));
  end;
end;
aufruf mit:

Delphi-Quellcode:
message_broadcast(form2.serversocket.socket, 'meinText');
Grüße,

Björn

Counter909 23. Jul 2008 13:18

Re: Chat Funktion
 
ok das probiere ich dann gleich oder bissel später, weil ich da ja komplett umänder, wegen twinsock, aber schonmal guter tipp :-)


aber der verbindungsaufbau würd mich jetzt nochmal interessieren

delphis spassbremse 23. Jul 2008 13:30

Re: Chat Funktion
 
also viel umändern musst du da nicht...

setz mal die procedure vor
"procedure TForm1.ChatClick(Sender: TObject); "

und ersetze
"form1.ServerSocket1.Socket.SendText(edit5.tex t); "

durch

"message_broadcast(form1.ServerSocket1.Socket, edit5.Text);"

Grüße,

Björn

angos 23. Jul 2008 13:35

Re: Chat Funktion
 
sehe ich das richtig, dass du nur den clientsocket initialisierst und dann versuchst über den Serversocket zu senden? Habe zwar mit Sockets noch nichts zu tun gehabt, aber das scheint doch das eigentliche Problem zu sein, oder?

delphis spassbremse 23. Jul 2008 13:42

Re: Chat Funktion
 
jap, das ist auch ein problem.

Nur ich hab gleich im ersten Post gesehen, dass es nicht funktionieren kann, da bei ServerSocket.socket.sendtext() kein empfänger angegeben ist.

Du kannst Daten nur an eine bestehende Verbindung gleichzeitig senden.

Bei ServerSocket.socket.sendtext() ist keine Verbindung angegeben.
Also sendet der ins nichts und löst ne exception aus.

Grüße,

Björn

Counter909 23. Jul 2008 14:00

Re: Chat Funktion
 
ahhh jetzt hat es endlich geklappt :-)



außerdem war noch ein fehler:

es muss so aussehen, um die nachricht zu erhalten:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 memo1.Lines.Add(Socket.ReceiveText)
end;



vielen dank für die schnellen hilfen :-)

Counter909 23. Jul 2008 22:08

Re: Chat Funktion
 
oh sorry...



ist das normal, dass ich eine nachricht nur vom client zum server schicken kann ?

wen ich es andersrum mache, dann schmiert das programm ab :-|


SERVER:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var text:string;
begin
memo1.Lines.Add('Host: '+edit1.Text+'');
serversocket1.Socket.SendText(edit1.Text);

end;

procedure TForm2.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  memo1.Lines.Add('Client: '+Socket.ReceiveText+'')
end;

Client:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var text:string;
begin
 memo1.Lines.Add('Client: '+edit1.Text+'');
 clientsocket1.Socket.SendText(edit1.Text);
end;

procedure TForm2.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var text:string;
begin
memo1.Lines.Add(Socket.ReceiveText)
end;

also ich kann nur in eine Richtung einen Text schicken


mfg

IceBube 24. Jul 2008 07:45

Re: Chat Funktion
 
Hallo!

Zitat:

Zitat von Counter909
ist das normal, dass ich eine nachricht nur vom client zum server schicken kann?...also ich kann nur in eine Richtung einen Text schicken

Ja, der Server empfängt die gesendeten Daten von den Clienten.

Also musst du auf der ServerForm einen "TServerSocket" + einen "TClientSocket" haben, auf der ClientForm jedoch brauchst du nur einen "TClientSocket"..

lg

Cyf 24. Jul 2008 07:57

Re: Chat Funktion
 
Zitat:

Zitat von IceBube
Also musst du auf der ServerForm einen "TServerSocket" + einen "TClientSocket" haben

TServerSocket reicht...

Zum Senden zum Client nochmals:

Delphi-Quellcode:
ServerSocket.Connections[i].SendText(TextStr);
Außerdem deklarierst du eine Menge lokale Variablen und nutzt sie dann nicht und Informationen gehören nicht im visuellen Bereich gespeichert.

Counter909 24. Jul 2008 17:29

Re: Chat Funktion
 
ah es hat geklappt :-)


nochmal für alle:
beim Server müsst ihr dann

Delphi-Quellcode:
serversocket1.Socket.Connections[0].SendText(text);
eingeben


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