Einzelnen Beitrag anzeigen

Benutzerbild von Evian
Evian

Registriert seit: 10. Apr 2003
Ort: Berlin
485 Beiträge
 
Delphi 6 Professional
 
#1

Sehr langen String mit Clientsocket an Serversocket senden..

  Alt 27. Feb 2004, 10:58
Ich möchte gern den Inhalt einer Listbox über die Clientsocket Kombo an eine Serversocket Kombo schicken und dann wieder in einer anderen Listbox Speichern. Dazu versende ich einfach den CommaText und das ist soweit auch gar kein Problem. Wenn der Comatext der ersten Listbox jedoch eine bestimmte Zeichenanzahl übersteigt, wird der der Sendestring nicht mehr als ein Packet abgeschickt, sonder in mehrere Teiler zersplittet. Nun wird es recht schwer den Comatext einfach im ServerSocket1ClientRead zu speichern, da

Code:
Serverlistbox.items.comatext := socket.ReceiveText
bewirken würde, dass nur das letzte Teilpacket in der Serverlistbox gespeichert wird.
Naja ich habe das jetzt so gemacht, dass ich bevor ich den String verschicke, vorhänge wie viele Zeichen der String hat und dann später vergleiche: Hat der empfangene Comatext die Zeichenanzahl des versendeten Comatexts, dann ist alles Prima, ansonsten soll immer wenn ein neues Stringpacket empfangen wird dieses an den Comatext rangehängt werden ... halt eben so lange bis Server Comatext gleich Client Comatext ist.

Mh.. ich schätze jetzt peilt keiner, gar nichts mehr... also zeig ich mal meinen Code;

Code:

// Zum Versenden

procedure Clientform.Button1Click(Sender: TObject);
VAR
send : STRING;
BEGIN
  send := '±±±'+ inttostr(length(Clientlistbox.Items.CommaText)) + '±±±' + Clientlistbox.Items.CommaText;
  socket.SendText(send);
END;

// Emphangen
procedure Serverform.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
VAR
s, sh : STRING;
i : INTEGER;
begin
  s := socket.ReceiveText;;
  FOR i := 1 TO 3 DO sh := sh + s[i];
  IF sh = '±±±' THEN
  BEGIN
    all := FALSE; // Global
    delete(s,1,3);
    laenge := strtoint(copy(s, 1,pos('±±±',s)-1));
    delete(s,1,pos('±±±' ,s) + 2);
    coma := coma + s; // Global
    s := '';
    if length(coma) = laenge THEN
    BEGIN
      all := TRUE; // Global
      Serverlistbox.Items.CommaText := coma;
      socket.Close;
    END;
  END;

  IF all <> TRUE THEN
  BEGIN
    coma := coma + s;
    if length(coma) = laenge THEN
    BEGIN
      all := TRUE; // Global
      Serverlistbox.CommaText := coma;
      socket.Close;
    END;
  END;
END;

Also das funktioniert soweit auch alles Prima. Nur kommt mir das ein wenig zu kompliziert vor, es muss doch auch einen einfacheren Weg geben um lange Strings übers Netz zu versenden, oder?! Hat Jemand eine Idee?!
-> www.Phillsoft.de

Ich bin nun Mathematiker, aber meine Freundin bleibt trotzdem unberechenbar!
  Mit Zitat antworten Zitat