AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi socket-problem (receive + send)
Thema durchsuchen
Ansicht
Themen-Optionen

socket-problem (receive + send)

Offene Frage von "marius86"
Ein Thema von marius86 · begonnen am 18. Jul 2004 · letzter Beitrag vom 19. Jul 2004
Antwort Antwort
marius86

Registriert seit: 23. Jun 2003
Ort: Aachen
17 Beiträge
 
Delphi 7 Enterprise
 
#1

socket-problem (receive + send)

  Alt 18. Jul 2004, 12:48
Hi

also ich hier folgendes schnippselchen:

Delphi-Quellcode:
procedure TServer.ServerSocket2ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 anzahl:Integer;
  i:Integer;
  r_text:String;
begin

  // Routine für Joinen
 if (flag_connected = True) then
  begin
  r_text:=Socket.ReceiveText;
  users.Items.Add(r_text);
  Memo1.Lines.add('Username: '+r_text);
  flag_connected := False;
  end;

 if (Socket.ReceiveText = 'New_join') then
  begin
  Memo1.Lines.add(Timetostr(now)+': New user connected');
  flag_connected := True;
  end;
   // Ende Routine für Joinen



 if (flag_quit = True) then
  begin

   for i := 0 to users.Items.Count -1 do
    begin
    if (users.Items[i] = Socket.ReceiveText) then
    users.items.Delete(i);
    end;

  Memo1.Lines.add('Username: '+Socket.ReceiveText);
  flag_quit := False;
  end;


 if (Socket.ReceiveText = 'New_quit') then
  begin
  Memo1.Lines.add(Timetostr(now)+': User quit');
  flag_quit := True;
  end;



end;
Erklärung: Wenn jemand eine Verbindung mit dem Server aufbaut, dann wird über den Socket ein Text gesendet mit folgender Proc:

Delphi-Quellcode:
Nachricht := 'New_join';
delay(500);
ClientSocket2.Socket.SendText(Nachricht);
Nachricht := nick.Text;
delay(500);
ClientSocket2.Socket.SendText(Nachricht);
Das Joinen klappt auch noch wunderbar...
nun hab ich in dem Programm bei onClose noch das gleiche allerdings halt mit Nachricht := 'New_quit'...

aber DAS funktioniert nicht. der server bekommt nicht das 'New_quit' und führ dementsprechend auch nichts aus...

was könnte das Problem sein? Ich vermute ggf das man indem Empfangsteil nicht 2 mal hintereiander Socket.Receive abfragen kann?


gruß
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: socket-problem (receive + send)

  Alt 18. Jul 2004, 17:02
Moin!

Was mir auffällt: Wenn du einmal in dem OnClientRead ReceiveText() aufgerufen hast, dann kannst du es in der Procedure nicht nochmal aufrufen, da ReceiveText() dir den Inhalt des Empfangbuffers zurück gibt und dann leert. Also mache einmal ReceiveText(), speichere das in einer Variablen und untersuche diese dann...

MfG
Muetze1
  Mit Zitat antworten Zitat
marius86

Registriert seit: 23. Jun 2003
Ort: Aachen
17 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: socket-problem (receive + send)

  Alt 18. Jul 2004, 17:19
Zitat von Muetze1:
Moin!

Was mir auffällt: Wenn du einmal in dem OnClientRead ReceiveText() aufgerufen hast, dann kannst du es in der Procedure nicht nochmal aufrufen, da ReceiveText() dir den Inhalt des Empfangbuffers zurück gibt und dann leert. Also mache einmal ReceiveText(), speichere das in einer Variablen und untersuche diese dann...

MfG
Muetze1
HI

Stimmt, ist mir zwischenzeitlich auch eingefallen, hab ich auch so gemacht. Aber das hat ja leider nichts mit meinem Problem zu tun. Irgendwie tritt das auch nur sporadisch auf...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: socket-problem (receive + send)

  Alt 18. Jul 2004, 17:21
Versuch mal den Teil der OnClose in die OnCloseQuery zu verschieben. Es kann sein, dass zum Zeitpunkt des Sendens die Verbindung nicht mehr aktiv ist.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: socket-problem (receive + send)

  Alt 18. Jul 2004, 20:00
Moin!

Genauso gut ist die Trennung zwischen SendText() und ReceiveText() nie gewährleistet. Mit anderen Worten: Es kann leicht vorkommen, dass du mit ReceiveText() einen String bekommst, der von 2 SendText() gesendet wurde, also das er verbunden wieder empfangen wird. Da musst du dir eine ordentliche Trennung zu einfallen lassen...

MfG
Muetze1
  Mit Zitat antworten Zitat
marius86

Registriert seit: 23. Jun 2003
Ort: Aachen
17 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: socket-problem (receive + send)

  Alt 19. Jul 2004, 00:32
Hi muetze, das hab ich jetzt irgendwie nich verstanden...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: socket-problem (receive + send)

  Alt 19. Jul 2004, 00:35
Moin!

Es kann sehr gut vorkommen, wenn du mit SendText einmal z.B. 'Hallo' sendest und irgendwo danach irgendwann auch noch 'du'. Nun kann es aber vorkommen das du bei ReceiveText einfach ein 'Hallodu' bekommst - weil es halt keine Sicherheit gibt, das 2 unterschiedliche SendText Aufrufe in einem ReceiveText enden.

Nun verstanden?

MfG
Muetze1
  Mit Zitat antworten Zitat
marius86

Registriert seit: 23. Jun 2003
Ort: Aachen
17 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: socket-problem (receive + send)

  Alt 19. Jul 2004, 01:30
Ahh ja danke... nun da hätte ich denn ne Idee... ein Trennzeichenfolge ala ||-||

Also an jeden Text der gesendet wird wird ein ||-|| gehängt damit der Empfänger das aufteilen kann...

nur wie geht das?

bin ein delphi einsteiger.. in php geht sowas mit explode...
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: socket-problem (receive + send)

  Alt 19. Jul 2004, 12:49
Moin!

Einfach mal danach suchen: Hier im Forum suchenexplode

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:06 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