Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit ClientSocket.Socket.SendText (https://www.delphipraxis.net/137115-problem-mit-clientsocket-socket-sendtext.html)

Tim-94 14. Jul 2009 18:13


Problem mit ClientSocket.Socket.SendText
 
Hi, ich habe folgendes Problem:
Ich habe einen kleinen Chat programmiert bei dem ich die Komponenten TClientSocket und TServerSocket verwende.
Dieser Chat funktioniert auch soweit gut, mein einziges Problem ist, dass der Client einen Text, der zu lang ist, nicht vollständig sendet.
Er sendet den Text nämlich nur bis einschließlich dem Compputernamen, der ja in der Variable übergeben wird.

Delphi-Quellcode:
  if (ClientSocket1.Active) then begin // noch online?
      ClientSocket1.Socket.SendText('Observer-Client Online -> '+GetUserName+' am PC: '+ComputerName+' - Am '+DatetoStr(Date)+' um '+TimetoStr(Time)+' Uhr!');
  end;
PS: Die beiden Variablen GetUserName und ComputerName funktionieren.

Klaus01 14. Jul 2009 18:16

Re: Problem mit ClientSocket.Socket.SendText
 
Hallo,

kann es sein, dass am Ende der Rückgabe von Computername noch ein #0 steht?
Vielleicht solltest Du es mal mit

Delphi-Quellcode:
trim(ComputerName)
probieren.

Grüße
Klaus

Muetze1 14. Jul 2009 18:21

Re: Problem mit ClientSocket.Socket.SendText
 
Ich möchte auch mitraten: Kann es sein dass du beim Empfänger (in diesem Falle das OnClientRead des TServerSockets) erwartest, dass die Texte in einem Aufruf mit ReceiveText ankommen, welche du auch so in einem Stück versendet hast?

TServerSocket/TClientSocket versenden nur Rohdaten und implementieren kein Protokoll. Durch diesen Fakt garantieren sie dir nur eins: die Daten kommen in der gleichen Bytereihenfolge an wie sie versendet werden oder es gibt einen Fehler. Aber sie garantieren dir keine Teilung der Daten. Die Daten können dabei unterteilt werden wie sie lustig sind - im schlimmsten Falle (z.B. schlechte Verbindung) bekommst du alle Minute mal ein Zeichen. Du musst dafür sorgen die Daten ordentlich zu handeln und du musst dafür sorgen zu wissen ob eine Nachricht vollständig empfangen wurde oder nicht bevor du sie verarbeitest. Von daher musst du dir ein Protokoll ausdenken und implementieren. Die Sockets bieten dir nur eine Schnittstelle um Bytes zu übertragen.

Such hier im Forum und du wirst genügend Beispiele finden.

@Klaus01: er baut einen String zusammen, der Parameter ist genauso ein String und damit wird in diesem Falle #0 unerheblich. Selbst wenn es mit in dem String sein sollte, würde es einfach so mitgesendet werden.

EDIT: Warum auch immer das damit geht...

Tim-94 14. Jul 2009 18:21

Re: Problem mit ClientSocket.Socket.SendText
 
Jo danke, es geht!
So einfach kann ein Problem zu lösen sein^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 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