![]() |
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: ![]() 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 |
Re: Chat Funktion
Zeig mal den Code bitte.
|
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); |
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:
|
Re: Chat Funktion
Am besten lädst du mal beide Quellcodes vollständig hoch dann kann man dir auch schon mal besser helfen :zwinker:
|
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. |
Re: Chat Funktion
Der Verbindungsaufbau fehlt aber trotzdem. Machst du dass im OI?
|
Re: Chat Funktion
nein....active := true ??
|
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:
aufruf mit:
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;
Delphi-Quellcode:
Grüße,
message_broadcast(form2.serversocket.socket, 'meinText');
Björn |
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 |
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 |
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?
|
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 |
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 :-) |
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 |
Re: Chat Funktion
Hallo!
Zitat:
Also musst du auf der ServerForm einen "TServerSocket" + einen "TClientSocket" haben, auf der ClientForm jedoch brauchst du nur einen "TClientSocket".. lg |
Re: Chat Funktion
Zitat:
Zum Senden zum Client nochmals:
Delphi-Quellcode:
Außerdem deklarierst du eine Menge lokale Variablen und nutzt sie dann nicht und Informationen gehören nicht im visuellen Bereich gespeichert.
ServerSocket.Connections[i].SendText(TextStr);
|
Re: Chat Funktion
ah es hat geklappt :-)
nochmal für alle: beim Server müsst ihr dann
Delphi-Quellcode:
eingeben
serversocket1.Socket.Connections[0].SendText(text);
|
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