Autor Beitrag
uspegasus
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 10.03.03 19:19 
Hallo Leute!

Ich habe ein Chat mit TServerSocket programmiert und als Client wird ein JavaApplet über einen Browser gestartet.

Das starten und laden klappt alles einwandfrei und die Verbindung wird auch hergestellt. Wenn ich von Client(Applet) aus einen Text sende kommt dieser auch an und wird ín dem Programm im Memofeld angezeigt!

Will ich aber einen Text mit:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm2.Button1Click(Sender: TObject);
 var MSText: String;
begin

        MSText := Edit1.Text;
        Memo1.Lines.Add(login+': '+Edit1.Text);
        ServerSocket1.Socket.Connections[ServerSocket1.Socket.ActiveConnections-1].SendText(MSText);
        Edit1.Text := '';

end;


senden wird dieser im ClientApplet nicht angezeigt? Erst wenn ich das Programm schliesse erscheint plöttzlich der gesendete Text im ClientApplet????? Wie kann das eigentlich passieren? Die Verbindung wurde doch getrennt?

Vielleicht weiss jemand ja warum das so ist. Würde mich freuen wenn ihr mir hier helfen könnt.

Gruss uspegasus

Moderiert von user profile iconKlabautermann: Code-Tag hizugefügt.
Moritz M.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1672



BeitragVerfasst: Mo 10.03.03 21:58 
Hmmm...sowas ist mir noch nie untergekommen. Also, der Text wird erst gesendet, wenn das Delphiprogramm geschlossen wird. Du kannst es mal statt den normalen Delphi TCP/IP-Server mit nem Indy TCP/IP-Server versuchen oder einfach mal in OnConnect-Prozedur von dem Server direkt über die in der Prozedur gegebene Variabele Socket den Text versenden. Die Sariable Socket ist dann nämlich direkt die Verbindung, die aufgebaut wurde.
uspegasus Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 10.03.03 23:03 
Ehrlich gesagt ist mir das auch ein Rätsel. Aber der Text erscheint wirklich erst wenn das Delphi Programm geschlossen wurde und dann auch der gesamte Text aneinandergereit wenn man vorher mehrmals den Button zum Senden geklickt hat??? Ich habe es auch schon als Stream versucht. Aber genau daselbe?

Vielleicht liegt es ja am ClientApplet aber das fragt über eine While-Schleife ständig den Server ab und sobald ein Text gesendet wird gibt es diesen im OutpuArea aus.

Kann das irgendwie mit Synchron oder Asynchron zutun haben?
Hier bin ich erhlich gesagt mit meinem Wissen am Ende.

Das Problem mit dem Indy Servern ist das sie gleich wieder disconnecten.
Das wollte ich eigentlich nicht sondern die Verbindung soll halt solange aufrecht erhalten bleiben bis einer die Verbindung trennt.

Aber werde es auf jeden Fall mal probieren.
Moritz M.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1672



BeitragVerfasst: Di 11.03.03 14:15 
Nun bin ich auch am Ende meines Wissens. Du könntest mal so versuchen, indem du erst vor dem Senden verbindest und direkt danach wieder trennst. Mehr fällt mir grad auch nicht ein.
Dj_GL
Hält's aus hier
Beiträge: 16



BeitragVerfasst: Mi 19.03.03 22:24 
Verwende zum Senden:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TMainform.SendText(Socket:TCustomWinSocket;Text:string);
begin
 try
  while (Socket.Connected) and (Socket.SendText(Text)=0) do
  begin
   application.processmessages;
  end;
 except
 end;
end;


Aufruf in Deinem Fall: SendText(ServerSocket1.Socket.Connections[ServerSocket1.Socket.ActiveConnections-1],MSText);
uspegasus Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 20.03.03 13:07 
Nochmals Danke für eure Mühe! Habe das Problem aber schon gelöst ! :D

Es war eigentlich ganz einfach wie immer wenn man es dann herausbekommen hat! Alles was gefehlt hat war #13#10 am Ende des Strings den man sendet damit der Client weiss das die Nachricht abgeschlossen ist!

Hier mal der Code für alle die mal mit einem solchem Problem zutun haben:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
  var MSText: String;
  var i: Integer;
begin
    if Key =#13 then begin   //Schaltet den PeepTon aus!
        Key := #0;
        MSText := Edit1.Text;
        Memo1.Lines.Add(Login+ ': '+MSText);
        for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
        begin
        Application.ProcessMessages;
        ServerSocket1.Socket.Connections[i].SendText(Login+': '+MSText+#13#10);
        end;
        Edit1.Text := '';
      end;
end;


Gruss
uspegasus

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
Dj_GL
Hält's aus hier
Beiträge: 16



BeitragVerfasst: Do 20.03.03 19:19 
ausblenden Quelltext
1:
ServerSocket1.Socket.Connections[i].SendText(Login+': '+MSText+#13#10);					


Du wirst merken das bei schnellerem senden über das Internet dir das meiste davon verlorengeht ....

Verwende die oben erwähnte Funktion ....

MFG
Dj_GL

_________________
MFG
Dj_GL