Entwickler-Ecke

Internet / Netzwerk - CHAT-Programmieren....


Scrat - Fr 11.04.03 09:15
Titel: CHAT-Programmieren....
Hallo zusammen,

ich habe mal einfach die Demo des Chats von Delphi genommen und erweitert.
Ist ja alles ganz schön und gut...aber wenn der Server was sendet kann der Client das nicht empfangen (zeigt es auf jedenfall nicht an).

Der Server hingegend zeigt alles an. Die gesendeten Zeilen vom Clienten und von sich selbst.

Warum kann der Client die Zeilen vo Serve nicht anzeigen??


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TChatForm.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var i: integer;
begin
 i:=1;
 if Key = VK_Return then
 begin
  if IsServer=true then   //Wenn man Server ist.
  begin
   ServerSocket.Socket.Connections[0].SendText('['+TimeToStr(Time)+'] '+Edit1.text+': '+Memo1.Lines[Memo1.Lines.Count - 1]);
   Memo2.Lines.SaveToFile('LOG'+inttostr(i)+'.txt');
   i:=i+1;
  end
  else
  if IsServer=false then  //Wenn man Client ist.
  begin
  ClientSocket.Socket.SendText('['+TimeToStr(Time)+'] '+Edit1.text+': '+Memo1.Lines[Memo1.Lines.Count - 1]);
  Memo2.lines.add('['+TimeToStr(Time)+'] '+Edit1.text+': '+Memo1.Lines[Memo1.Lines.Count - 1]);
  Memo2.Lines.SaveToFile('LOG'+inttostr(i)+'.txt');
  i:=i+1;
  memo1.text:='';
 end;
end;
end;


MFG
Scrat


focus - Fr 11.04.03 09:54

was steht denn im onreceive des clients?
gruss
michael

ps: ich weiss jetzt nicht ob es am kopieren liegt aber ich würde die einrückungen nochmal überarbeiten.... nur der sichtbarkeit halber und das andere mehr lust haben deinen code überhaupt zu lesen....


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:
procedure TChatForm.Memo1KeyDown(Sender: TObject; 
    var Key: Word; Shift: TShiftState);
var
  i: integer;
  Server: TServerSocket;
  Client: TClientSocket;
begin
  Server := ServerSocket.Socket; // init
  Client := ClientSocket.Socket;    // um die langen zeilen zu kürzen
  i:=1;                         

  if(Key = VK_Return)then       
  begin
    if(IsServer)then
    begin
      Server.Connections[0].SendText('['+TimeToStr(Time)+'] '+Edit1.text+
                                     ': '+Memo1.Lines[Memo1.Lines.Count - 1]);
      Memo2.Lines.SaveToFile('LOG'+inttostr(i)+'.txt');
    end
    else
    begin
      Client.SendText('['+TimeToStr(Time)+'] '+Edit1.text+
                      ': '+Memo1.Lines[Memo1.Lines.Count - 1]);
      Memo2.lines.add('['+TimeToStr(Time)+'] '+Edit1.text+
                      ': '+Memo1.Lines[Memo1.Lines.Count - 1]);
      Memo2.Lines.SaveToFile('LOG'+inttostr(i)+'.txt');
      memo1.text:='';
    end;
    inc(i);                  // anstelle von i:=i+1; verwende inc(i)
  end;
end;


Scrat - Fr 11.04.03 11:05

Okidokili.... :D

Also Folgendes Steht in den Felder:

CLIENT-SOCKET
OnConnect:

Quelltext
1:
2:
Statusbar2.Panels[0].Text :=
 'Connected to: ' + Socket.RemoteHost;


OnDisconnect:

Quelltext
1:
Statusbar2.Panels[0].Text := 'Offline';                    


OnError:

Quelltext
1:
2:
3:
Memo2.Lines.Add('Verbindung mit  '+Server+' 
 konnte nicht hergestellt werden.');
 ErrorCode := 0;


OnRead:

Quelltext
1:
Memo2.Lines.Add(ServerSocket.socket.ReceiveText);                    



SERVER-SOCKET
OnAccept:

Quelltext
1:
2:
IsServer := True;
  Statusbar2.Panels[0].Text := 'Verbunden mit: ' + Socket.RemoteAddress;


OnClientDisconnect:

Quelltext
1:
Statusbar2.Panels[0].Text := 'Offline';                    


OnClientRead:

Quelltext
1:
Memo2.Lines.Add(Socket.ReceiveText);                    


MFG
Scrat


focus - Fr 11.04.03 12:15

Memo2.Lines.Add(ServerSocket.socket.ReceiveText);

ich denke mal das müsste clientsocket.socket.receivetext heissen..
arbeite nicht ganz so gerne mit der komponente schau dir mal die indys an und die simpletcp komponente von UtilMind (pers favorit)...

http://ip-web.hn.org/filez/scktbsp.zip
gruss
michael


patmann2001 - Mo 14.04.03 09:27

Hallo
focus hat recht.
Ausserdem wirst Du feststellen, das Du mit diesem Programm immer nur einen Server mit einem Client verbinden kannst. Du musst Dir noch was für die MultiClient Situation einfallen lassen.
Wenn Du fragen hast, dann melde Dich ruhig bei mir.

cu Patmann