Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Einige fragen zu TSocketServer und TSocketClient

  Alt 13. Mär 2008, 15:41
Der Server hat doch mehrere Socketverbindungen zu jedem Client. Damit kann jeder Socket zur selben Zeit ihm was senden. Wenn beim Server nun ein Socket was empfangen hat von seinem Client, dann ruft der Server das OnClientRead Ereignis auf und übergibt genau den Socket als Argument, bei welchem was empfangen wurde. Du kannst somit über das Socket Argument die Clients eindeutig auseinander halten (die gleichen Instanzen findest du auch in der ServerSocket.Socket.Connections[] Eigenschaft wieder). Diese Instanzen sind über die gesamte Verbindungszeit eines Clients hin eindeutig und gleich.

Dann zu der Frage mit dem Packeten: wenn du vom Client z.B. folgenden String sendest:

Send("hallo");
Send("ballo");

dann kann der Server das z.B. so empfangen:

Receive("halloballo")

oder

Receive("hal");
Receive("l");
Receive("oball");
Receive("o");

jedes Receive("") steht für ein OnClientRead() Aufruf)

Mit anderen Worten: Die Sockets übertragen einfach nur die ihr angetragenen Bytes zu dem angetragenen Empfänger. Wie du den Sockets die Daten übergibst, also in gesonderten Aufrufen oder mit einem großen Aufruf interessiert den Socket nicht die Bohne. Wenn Bytes anstehen zum übertragen, dann überträgt er die. Er garantiert dir soweit nur, dass die Reihenfolge der Bytes eingehalten wird und auch entsprechend beim Empfänger ankommen.

Für alles andere ist ein Protokoll zuständig - die Sockets implementieren keins (wäre ja auch schlimm, dann wärst du auf ein Protokoll festgelegt und könntest dir schlecht ein eigenes implementieren), somit musst du dir eins ausdenken. Schon allein ein besonderes Zeichen als Trenner, welches in den Daten nicht vorkommt, wäre ein Protokoll. Damit kannst du erkennen, ob ein Packet vollständig ist bzw. wo es aufhört und das nächste anfängt, etc.
  Mit Zitat antworten Zitat