NSFileHandleExt ist eine Erweiterung für die Objective-C/Cocoa-Klasse NSFileHandle, die man für den Umgang mit Dateien und Sockets verwendet.
Diese Erweiterung fügt die Methoden
+(id)fileHandleWithConnectionToHost:(NSString*)host
toPort:(int)port; und -(NSString*)readLine; sowie
-(void)writeLine:(NSString*)line; hinzu, welche Wrapper um die
BSD-Sockets sind. Somit hat man eine einfache Möglichkeit, schnell und
effizient auf den Socket zuzugreifen.
Methoden
+(id)fileHandleWithConnectionToHost:(NSString*)host toPort:(int)port
Diese Methode gibt ein neues NSFileHandle zurück, nachdem eine Verbindung mit dem angegeben Host auf dem angegeben Port hergestellt wurde. Konnte diese Verbindung nicht hergestellt werden, wird eine Exception ausgelöst.
-(NSString*)readLine
Diese Methode liest eine Zeile vom Socket und gibt sie zurück. Eine Zeile geht bis zum abschließenden "\n".
-(void)writeLine:(NSString*)line
Schreibt die angegebene Zeile mit einem abschließenden "\r\n" auf den Socket.
Kompatiblität
Ich habe diese Erweiterung sowohl unter Cocoa (auf Mac OS X 10.4.9) als auch unter GNUstep (1.11.2) verwendet :-).
Anwendungsbeispiel
Dieses Beispiel verbindet sich auf Port 80 des lokalen Rechners und sendet eine HTTP-Anfrage. Das Ergebnis des Servers wird im Logfenster ausgegeben. Anschließend wird die Verbindung geschlossen.
NS_DURING {
NSFileHandle *connection = [NSFileHandle fileHandleWithConnectionToHost:@"localhost" toPort:80];
[connection writeLine:@"GET / HTTP/1.1"];
[connection writeLine:@"Host: localhost"];
[connection writeLine:@""];
NSString *reply = [connection readLine];
while ([reply length] > 0) {
NSLog(@"Got line: %@", reply);
reply = [connection readLine];
}
[connection closeFile];
} NS_HANDLER {
NSLog(@"Error talking to server: %@", [localException reason]);
} NS_ENDHANDLER
Vor der Verwendung muss natürlich mittels #import "NSFileHandleExt.h" die Klasse eingebunden werden und die Dateien NSFileHandleExt.h und NSFileHandleExt.m zum Projekt hinzugefügt werden.