Entwickler-Ecke

Internet / Netzwerk - Socket.SendText


Moritz M. - Mo 21.10.02 19:22
Titel: Socket.SendText
Hi

hab ein kleines Prob:
Wenn ich

Quelltext
1:
Server.Socket.Connections[0].Sendtext('hallo');                    

und direkt dannach

Quelltext
1:
Server.Socket.Connections[0].Sendtext('taschau');                    

ausführe, kommt beim client immer "hallotschau" an.
Wie kann ich dass ändern?

cu

Onz


Marduk - Di 22.10.02 08:34

Weiss auch nicht genau, aber könnte funktionieren indem du nach jedem string einen Zeilenumbruch schickst (glaube das ging mit #13#10)
So hast du die strings dann getrennt
Gruß Dennis


Moritz M. - Di 22.10.02 13:43

Hi

geht leider nur manchmal...

cu

Onz


Moritz M. - Di 22.10.02 13:46

Hi

Geht leider nur manchmal..trotzdem danke

cu

Onz


O'rallY - Di 22.10.02 14:05

Die Idee vom Marduk war gar nicht so schlecht, doch statt des Zeilenumbruchs würde ich #0 vorschlagen, da man dieses Zeichen nicht schreiben kann, nur im Code festlegen. Wenn du dann einen String empfängst prüfst du ihn einfach auf das vorkommen von #0 und kannst dann den String mit folgendem Algi zerlegen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetWordOfString(Text: string; WordPos: Word): string;
var
 p : PChar;
begin
  p := PChar(Text);
  repeat
    Dec(WordPos);
    while p^ <> #0 do
    begin
      if WordPos = 0 then
         Result := Result + p^;
      Inc(p);
    end;
    if WordPos = 0 then Exit;
      Inc(p);
  until p^ = #0;
end;


Anwendung dürfte klar sein:

Quelltext
1:
2:
3:
4:
5:
6:
s1 := 'hallo' + #0 + 'welt';
s2 := GetWordOfString(s1, 1);
{s2 = 'hallo'}

s2 := GetWordOfString(s1, 2);
{s2 = 'welt'}


Eine andere Methode fällt mir zu Zeit nicht ein, denke aber das dies ne gute Lösung ist.


TheLaw - Fr 25.10.02 20:29

Hallo,

Hier mal eine Procedure (ungetestet) die einen Doppelnullterminierten string in eine StringList schreibt


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function StringToList(const AString: string; const AList: TStrings);
var
  P: PChar;
  S: string;
  Len: Integer;
begin
  Assert(Assigned(AList));
  P := PChar(AString);
  while P^ <> #0 do
  begin
    Len := StrLen(P);
    if Len > 0 then 
    begin
      SetLength(S, Len);
      StrLCopy(PChar(S), P, Len);
      AList.Add(S);
    end;
    Inc(P, Len+1);
  end;
end;


Beispiel für einen Aufruf:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  List: TStringList;
  S: string;
  I: Integer;
begin
  S := '1. Eintrag' + #0 + '2.Eintrag' + #0#0; // Wichtig: 2 Nullen am Ende
  List := TStringList.Create;
  try
    StringToList(S, List);
    for I := 0 to List.Count - 1 do
    begin
      // Mach was mit List
    end;
  finally
    List.Free;
  end;
end;


mfg
Th3Law


Moritz M. - Sa 26.10.02 07:43

Hi

Das mit den Codes wären schöne Lösungen. Nurm leider wird jeder String einzeln geschickt, komplett unanhänging und undregelmäßig.


Hagbard Celine - Sa 26.10.02 11:35

Onz hat folgendes geschrieben:
Hi

Das mit den Codes wären schöne Lösungen. Nurm leider wird jeder String einzeln geschickt, komplett unanhänging und undregelmäßig.


Ich kann eurem Problem nicht ganz folgen!

Für jeden String wird doch ein Ereig. ausgelöst und Du kannst jeden gesendeten String einzeln verarbeiten, oder???

Also hängt es Doch an Dir was Du damit machst, wenn Du beide Strings als caption eines Labels hintereinander hängst ist klar das kein Zeilenumbruch kommt!

Wenn Du jeden receivedText mit add in ein Memo schreibst sollte dann jeder String in einer Zeile stehen! Oder hab ich da was falsch verstanden???


Moritz M. - Sa 26.10.02 11:37

Hi

Ja, Ich sende auch jeder String einzeln. Nur geht das irgendwie nicht. Manchmal bekomme Ich einfach den Text aus 2x Senden hintereinander ausgegeben.


Hagbard Celine - Sa 26.10.02 11:44

Onz hat folgendes geschrieben:
Hi

Ja, Ich sende auch jeder String einzeln. Nur geht das irgendwie nicht. Manchmal bekomme Ich einfach den Text aus 2x Senden hintereinander ausgegeben.


Poste mal deine Prozedur die im onRead des Clients steht!