[prev in list] [next in list] [prev in thread] [next in thread] 

List:       suse-programming
Subject:    Re: [suse-programming] Sockets in verschiedenen Sprachen? Endekennung??
From:       Andre Heine <linux-experience () gmx ! net>
Date:       2002-06-20 19:30:09
[Download RAW message or body]

Hallo Eilert,

Am Donnerstag, 20. Juni 2002 21:07 schrieb Eilert Brinkmann:
> > Also mache ich noch ein "chop" hinterher, jetzt funktioniert
> > das ganze. Aber was hängt denn da nun eigentlich für ein
> > Steuerzeichen hinter?
>
> Falls obige Vermutung zutrifft, läßt das chomp natürlich noch ein
> "\r" am Ende des Strings übrig. Mit dem zusätzlichen chop wird
> dieses entfernt -- aber das Funktioniert mehr "zufällig" (eben
> weil's das letzte Zeichen ist), ist aber keine besonders saubere
> und robuste Lösung.

Nach "\r" habe ich natürlich noch nicht gesucht, "\0" ist es nicht.

So ganz bin ich auf java.sun.com noch nicht fündig geworden,
scheinbar wird aber kein "\n" angehängt, das hab' ich Dusel selbst
in Java angefügt.
Das komische an der Lösung von mir ist, daß ich in Java " \n"(mit 
einem Leerzeichen vor!) anhänge und mit chomp & chop wieder 
entferne. Lasse ich " \n" weg funktioniert es trotzdem nicht 
korrekt. Zum testen lasse ich das erstmal so, werde morgen mal die 
Klassen posten, vielleicht fällt noch etwas auf.

> > Ist das Sprachübergreifend gleich?
>
> Nein, nicht unbedingt. Sprachen (bzw. zugehörige Bibliotheken)
> stellen mitunter Hilfsmittel zum Lesen oder Schreiben von
> Textzeilen zur Verfügung. Die genauen Eigenschaften dieser
> Hilfmittel sollte man jeweils in der Dokumentation nachlesen,
> denn da kann es durchaus feine Unterschiede geben -- nicht nur
> zwischen verschiedenen Sprachen, sondern vor allem auch bei der
> gleichen Sprache auf unterschiedlichen Plattformen.

Ja, Windows Client, Server Linux... Da könnte auch noch etwas 
verschieden sein, aber die Doku zu Win9x ist ja so bescheiden :))

> auch verfügbar sein. Der Programmierer wird so dabei unterstützt,
> die in der jeweiligen Umgebung üblichen Konventionen einzuhalten.

Jo, das muß jedenfall noch was _besser_ machen. Ist ja später für 
die Produktion.

> festlegt. Man kann natürlich auch bewußt bestimmte Spielräume
> lassen und fordern, daß der Empfänger mit allen Varianten
> klarkommen muß.

Nee, das beibt mir zum Glück erspart...

> In Deinem Fall könntest Du z.B. sagen, daß der Empfänger
> verschiedene Darstellungen des Zeilenendes handhaben können muß.
> Für die Realisierung in perl gibt `perldoc -f chomp` Hinweise,
> wie sich daß Verhalten von chomp beeinflussen läßt. Du könntest
> auch einem String in der Variable $line mit
>
>   $line =~ s/[\r\n]+$//;
>
> von allen Carriage-Returns und Linefeeds am Ende befreien, egal,
> in welcher Anzahl und Reihenfolge die da stehen. Soviel ist wohl
> meist nicht nötig, und
>
>   $line =~ s/\r?\n$//;
>
> reicht, um am Zeilenende ein Linefeed und -- falls vorhanden --
> ein vorangestelltes Carriage-Return zu entfernen.

Ich denke, ich werde chomp & chop sein lassen und das ganze mit
regex machen, so werde ich auch sehen was da nun dran hängt.

> Die etwas sauberere Variante wäre es, für Deine Kommunikation
> genau festzulegen, wie ein ein Zeilenumbruch auszusehen hat (z.B.
> genau ein Linefeed), und dann in allen beteiligten Programmen
> sicherzustellen, daß (unabhängig von der jeweiligen Plattform)
> genau diese Darstellung auch verwendet wird.

Ja, das werde ich so machen, leider hatte ich nicht soviel Zeit auf 
der Arbeit das sauber zu machen.
Zu meinem Leidwesen ist das meinem Chef egal, sein Motto:

--->           Hauptsache funktioniert   <---

Ich kann das jedenfalls nicht meinem Gewissen vereinbaren.

> Übrigens verwenden etliche textbasierte Protokolle (z.B. auch
> HTTP, SMTP und NNTP) tatsächlich die Kombination von
> Carriage-Return und Linefeed als Zeilentrenner.

Am liebsten würde ich das binär machen, oder sogar verschlüsseln.
Wegen der Sicherheit, wird meinem Chef aber zulange dauern ;((

Mal was anderes, ich habe auf meinem Linux ein Paket "libnet".
Gibt es dazu ein Gegenstück für C++, oder kann ich libnet ruhig 
nehmen.
Den Server würde ich gerne für zuhause in C++ machen :))


Dank' nochmal...


CIao


Andre

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    suse-programming-unsubscribe@suse.com
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: suse-programming-help@suse.com

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic