![]() |
Sehr langen String mit Clientsocket an Serversocket senden..
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:
bewirken würde, dass nur das letzte Teilpacket in der Serverlistbox gespeichert wird.
Serverlistbox.items.comatext := socket.ReceiveText
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?! |
Re: Sehr langen String mit Clientsocket an Serversocket send
Hallo,
der Ausweg ist TWinSocketstream. Dafür musst Du eine blockierende Verbindung verwenden. ISt sowieso besser. |
Re: Sehr langen String mit Clientsocket an Serversocket send
Öhm hast Du dafür ein Beispiel oder so?! Kann mir darunter nichts
Richtiges vorstellen. Mit Strams hab ich noch nicht wirklich gearbeitet.. |
Re: Sehr langen String mit Clientsocket an Serversocket send
Hallo,
ein Beispiel habe ich z.Z. nicht. Diese Beispiele erstecken sich immer über endlos viele Codezeilen. Dadurch sind sie immer ziemlich unverständlich. |
Re: Sehr langen String mit Clientsocket an Serversocket send
Naja bei Google gibt es zum Thema "TWinSocketstream" nicht wirklich was, dass den umgang damitt vertändlich erklärt. Und die Delphi Hilfe beschreibt auch nur Allgemeinen Müll dazu :(
|
Re: Sehr langen String mit Clientsocket an Serversocket send
Zitat:
|
Re: Sehr langen String mit Clientsocket an Serversocket send
Und wie soll ich dann damitt arbeiten, wenn ich keine Ahnung habe wie´s funktioniert?! *g*
|
Re: Sehr langen String mit Clientsocket an Serversocket send
Ich habe sowas schon mal gemacht.
Dafür habe ich TClient- und TServerSocket verwendet. Ich viele kleine Testprogramme geschrieben, bis ich kapiert habe wie es geht. Das ist aber schon solange her, dass ich mich in das Thema wieder einarbeiten muss um ein Beispiel zu produzieren. Ich dachte ich mach das mal schnell. Jetzt kann ich aber TClientSocket und TServersocket in der D7 Pro Komponentenpalette nicht finden. Ich habe D7 erst seit 5 Wochen. Wo sind die Komponenten geblieben ? |
Re: Sehr langen String mit Clientsocket an Serversocket send
Zitat:
![]() MfG Christian |
Re: Sehr langen String mit Clientsocket an Serversocket send
Komponente -> Packages installieren -> Hinzufügen
und dann die dclsockets70.bpl aus dem Delphi-bin Verzeichnis laden ... und schwups sind die Sockets unter INTERNET wieder da. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz