Ich möchte ein UIImage zu einem NSOutputStream konvertieren und es über Socket an einen Server senden.Wie füge ich Daten für NSOutputStream hinzu?
#import "Connection.h"
@implementation Connection
-(void) open: (NSString *) h : (int) p
{
strHost = h;
intPort = p;
[NSStream getStreamsToHost:objHost
port:intPort
inputStream:&receiveStream
outputStream:&sendStream];
[receiveStream retain];
[sendStream retain];
[receiveStream setDelegate:self];
[sendStream setDelegate:self];
[receiveStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[sendStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[receiveStream open];
[sendStream open];
printf("Open.\n");
}
- (void) stream: (NSStream *) stream handleEvent: (NSStreamEvent) eventCode
{
printf("EVENT: Start.\n");
switch(eventCode)
{
case NSStreamEventOpenCompleted:
{
printf("EVENT: Open completed.\n");
if(stream == receiveStream)
{
printf("Receiving...\n");
}
if(stream == sendStream)
{
printf("Sending...\n");
NSString * strBuffer = [NSString stringWithFormat:@"GET/HTTP/1.0\r\n\r\n"];
const uint8_t * rawstring = (const uint8_t *)[strBuffer UTF8String];
[sendStream write:rawstring maxLength:strlen(rawstring)];
}
break;
}
case NSStreamEventEndEncountered:
{
printf("EVENT: End encountered.\n");
break;
}
case NSStreamEventHasSpaceAvailable:
{
printf("EVENT: Has space available.\n");
break;
}
case NSStreamEventHasBytesAvailable:
{
printf("EVENT: Has bytes available.\n");
break;
}
case NSStreamEventErrorOccurred:
{
printf("EVENT: Error occurred.\n");
break;
}
case NSStreamEventNone:
{
printf("EVENT: None.\n");
break;
}
}
printf("EVENT: End.\n");
}
-(void) close
{
[receiveStream close];
[sendStream close];
printf("Closed.\n");
}
@end
Meine Frage ist, wo kann ich Code wie "sendStream = ..." hinzufügen?
Eine andere Frage ist, dass ich UIImage zu NSData mit umwandeln kann:
NSData *imageData = UIImageJPEGRepresentation(imageView.image, 90);
Aber wie die imagedata zu NSOutputStream der Instanz konvertieren?
Sie können NSData -bytes und -length-Nachrichten für das letzte Bit verwenden. –
Entschuldigung im Chat gefragt, aber sie wussten es nicht und es scheint so als würdest du es tun. Ich versuche, Audiodaten zu streamen. Zur Zeit benutze ich gcdasyncsocket und schreibe die nsdata dazu. Allerdings erhalte ich statische Daten, so dass etwas mit dem Format nicht stimmt. Diese Daten würden nicht anders sein, wenn ich nstream verwenden würde, oder? –
@owengerig: Es wäre nur anders, wenn der Empfangscode - entweder Ihr oder GCDAsyncSocket - falsch ist. Sie haben den Quellcode von GCDAsyncSocket, also streuen Sie NSLogs an den richtigen Stellen und sehen Sie, was es empfängt, bevor es es an Sie weitergibt. Meine Wette wäre nein. –