AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TServerSocket kombiniert 2 Nachrichten...

TServerSocket kombiniert 2 Nachrichten...

Offene Frage von "---Bernhard---"
Ein Thema von ---Bernhard--- · begonnen am 23. Feb 2004 · letzter Beitrag vom 23. Feb 2004
Antwort Antwort
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#1

TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 11:51
Hallo!

Habe folgendes Problem mit meinem Chat-Programm (TServerSocket und TClientSocket):

Nach dem Verbindungsaufbau zum Server sendet der Client einen Text (Nachricht 1).
--> Server erhält den Text (Nachricht 1).
--> Server will den Text an die Clients weiterleiten (Nachricht 1).
--> Bei einer neuen Verbindung zu einem Client sendet der Server automatisch einen (anderen) Text an alle Clients (Nachricht 2).
--> Server sendet beide Texte gleichzeitig.
--> Client(s) empfängt/empfangen folgenden Text: Nachricht 1Nachricht 2
-->
--> (Server bzw. Client stürzen evtl. ab (z.B. wenn die Nachricht ein bestimmter Text ist, der dann einen Befehl ausführt...). )

Wie kann ich dieses Problem beheben? Hoffe, ich habe mich verständlich ausgedrückt.

Danke im Voraus!

MfG


PS: Ich habe die Suche benutzt, aber nichts gefunden. Ich weiß auch gar nicht genau, nach was ich suchen soll.
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 11:54
Zitat von ---Bernhard---:
--> Bei einer neuen Verbindung zu einem Client sendet der Server automatisch einen (anderen) Text an alle Clients (Nachricht 2).
Wo kommt diese Nachricht 2 her? Zaubert der Server

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 11:57
Zitat von sakura:
Zitat von ---Bernhard---:
--> Bei einer neuen Verbindung zu einem Client sendet der Server automatisch einen (anderen) Text an alle Clients (Nachricht 2).
Wo kommt diese Nachricht 2 her? Zaubert der Server

......
Nein, ich hab' halt in "OnClientConnect" reingeschrieben, dass er einen bestimmten Text (an alle Clients) senden soll (fester Text).
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#4

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:03
Alles was du in den SOcket reinschreibst, kommt hintereinander an, d.h. wen ndu in funktion 1 sendtext("hallo") schreibst und in einer anderen sendtext(" du") wird "hallo du" ankommen.
Einzige Ausnahme wenn die beiden Befehle zeitlich soweit auseinander liegen, dass der Winsock-Buffer vorher gesendet wird.

Ich hab das immer so gelöst, dass ich vor die Nachricht die Länge der Nachricht geschrieben und im Empfangs-Handler die Nachrichten wieder auseinandergefriemelt habe.

Beispiel:
sendtext(inttostr(5)+','+'Hallo');
sendtext(inttostr(3)+','+' du');

Dabei musst du aber auchnoch aufpassen, da von "5, Hallo" evtl. zu diesem Zeitpunkt nur "5, H" angekommen sind. Und die "allo" noch auf der Leitung unterwegs sind. D.h. die Empfangs+verarbeitungsroutine muss schon etwas aufwendiger sein.

Oder liege ich da falsch?
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:04
zeig doch mal deinen code... sendest du auch #13#10 ?
Mario
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:16
Zitat von Pseudemys Nelsoni:
zeig doch mal deinen code... sendest du auch #13#10 ?
Also...:

Delphi-Quellcode:
// OnConnect von Client:
  if ClientSocket1.active=true
    then //Im Falle das ClientSocket verbunden ist wird die Message aus edit1 verschickt
      begin
        ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat');
      end;


// OnClientRead von Server
  msg:= Socket.ReceiveText;
  vonWem:= socket.RemoteAddress;
  {...}
  for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
    begin // Anzahl der Teilnehmer
      with ServerSocket1.Socket.Connections[I] do
        begin // Auswahl des Teilnehmers
          if (Connected) then SendText(msg); // Text senden
        end;
    end;

// OnClientConnent von Server:
  for i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
    begin
      with ServerSocket1.Socket.Connections[I] do // Anzahl der Teilnehmer
        begin // Auswahl des Teilnehmers
          if (Connected) then SendText('/\/UsernameSenden') ; // Text senden
          erfolgreich:= True;
        end;
  
// OnRead von Client:
  msg:= Socket.ReceiveText;
  if Copy(msg, 1, 3) <> '/\/'
    then
      begin
        If (SoundAbspielen= True) and ( Copy(msg, 1, length(form2.LabeledEdit2.Text)) <> Form2.LabeledEdit2.Text) then mediaplayer1.Play;
        Memo1.Lines.Add(msg); //text wird eingetragen
      end
    else
      begin
        befehl:= copy(msg, 4, Length(msg) - 3);
        BefehlAusfuhren(befehl);
      end;
Die Nachricht, die ich vom Client sende beinhaltet auch #13#10:
Code:
nachricht:= Nickname + ' (' + DateTimeToStr(now) + '):' + #13 + #10 + edit2.Text + #13 + #10;
ClientSocket1.Socket.SendText(nachricht);
Hoffe, jetzt ist es klarer, wo mein Problem liegt...

Edit1: Ist das Problem evtl. mit Indy behoben?
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:19
hi,

änder mal das:

"ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat'); "

in das:

ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat' + #13#10); am besten für alle sendtext commands die du hast
Mario
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#8

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:28
Zitat von Pseudemys Nelsoni:
änder mal das:

"ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat'); "

in das:

ClientSocket1.Socket.SendText('--> ' + NickName + ' betritt den Chat' + #13#10); am besten für alle sendtext commands die du hast
Sorry, jetzt sendet er folgendes:
'Nachricht 1
Nachricht 2'
(^^^^ auch in einem String...)
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#9

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:30
Da du meinen Betrag ja ignorierst, dann lies doch in der Emfangsroutine einfach bis #13#10 ein, dann hast du das Problem auch gelöst.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#10

Re: TServerSocket kombiniert 2 Nachrichten...

  Alt 23. Feb 2004, 12:49
Zitat von Vjay:
Da du meinen Betrag ja ignorierst, dann lies doch in der Emfangsroutine einfach bis #13#10 ein, dann hast du das Problem auch gelöst.
Ich werde deine Lösung auch probieren (und ich igoriere deine Lösung nicht!). Sie ist halt unpraktisch. Kommt dann aber nicht auch wieder das Problem, dass er folgendes sendet:
'5,Hallo3, du'
--> also: 'Hallo3, du' ?

Was mich auch interessiert, ist, ob es mit Indy (oder einer anderen Kompo) dieses Problem nicht kommt. Dann würde ich mir halt die Arbeit machen, und "alles" umschreiben.

MfG
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz