Der Unterschied liegt darin, dass die write()-Methode den ihr übergebenen Byte-Array nach Möglichkeit in einem Paket ausgibt. Die println()-Methode ist aber so implementiert, dass für jedes Byte die write()-Methode einzeln aufgerufen wird. Somit wird pro TCP/IP-Paket nur ein Byte effektiver Daten übertragen. In Deinem Beispiel fast 200 Pakete übertragen werden. Was natürlich höchst ineffizient ist. Die print() bzw. println()-Methoden sind zwar sehr angenehm zu benutzen, aber nicht wirklich für schlaue Anwendungen zu empfehlen. Man kann jetzt vortrefflich darüber streiten, ob die Print-Klasse oder die write()-Methode der Ethernet-Klasse unschön implementiert ist.
Nach den gültigen Standards müsste ein Browser die Daten aus den verschiedenen Paketen problemlos zusammensetzen können, aber der IE hat die Bezeichnung Browser ja auch nicht wirklich verdient
paulinchen:
Was ist der Unterschied zwischen den beiden Schreibweisen?
Das "println" hängt nur ein Linefeed Steuerzeichen "\n" an den String dran.
Das ist zwar legal, um die Zeilen im HTTP-Header zu trennen und auch und die Zeilen in der HTTP-Message zu trennen, aber es ist gemäss HTTP-Standard nicht legal, um die Header-Response von Body der Message zu trennen.
So ganz generell würde ich dem nicht zustimmen, aber wenn Du Wert darauf legst, dass das sich nicht an Standards haltende Ding von Microsoft auch zugreifen können soll, wirst Du wahrscheinlich nicht darum herum kommen.
Die Print-Klasse hat aber durchaus auch ihre Vorzüge. z.B. kannst Du dort einfach das F()-Macro verwenden und sparst dadurch viel RAM ein. Das mit vernünftigem write()-Aufruf abzubilden macht Kompromisse nötig.
@jurs: println() hängt ein "\r\n" an das Argument an (und nicht nur ein "\n"), aber es ruft eben die write()-Methode byte-weise auf.
Aber mit Hilfe der Flash-library könnte ich ja Flash-strings definieren und diese dann mit client.write() nutzen...
Ich weiss nicht, welche Flash-Library Du meinst, aber so einfach dürfte das nicht werden. Wenn Du die Strings des F()-Macros meinst, die kannst Du nicht direkt per write() ausgeben.