Je veux envoyer un UIImage à un serveur via une socket.Comment utiliser le message d'écriture de NSOutputStream?
a) J'ouvre la outputstream:
- (IBAction)send:(id)sender {
NSURL *website = [NSURL URLWithString:str_IP];
NSHost *host = [NSHost hostWithName:[website host]];
[NSStream getStreamsToHost:host port:1100 inputStream:nil outputStream:&oStream];
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream open];
}
b) J'écris NSData à fluxSortie après ouverture terminée et gérer l'erreur en cas d'erreur.
- (void) stream: (NSStream *) stream handleEvent: (NSStreamEvent) eventCode
{
//printf("EVENT: Start.\n");
switch(eventCode)
{
case NSStreamEventOpenCompleted:
{
//printf("EVENT: Open completed.\n");
if(stream == oStream)
{
//printf("Sending...\n");
NSData *data = UIImageJPEGRepresentation(drawImage.image, 90);
NSInteger x = [oStream write:[data bytes] maxLength:[data length]];
}
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:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error Occurred"
message:nil
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
break;
}
case NSStreamEventNone:
{
//printf("EVENT: None.\n");
break;
}
}
//printf("EVENT: End.\n");
}
Quand je lance ce code, NSStreamEventOpenCompleted et NSStreamEventErrorOccurred est la méthode d'écriture de called.The NSOutputStream a été appelé avec succès et toutes les données ne sont pas nulles. Mais après que les données ont été écrites dans l'oStream, le code d'événement devient NSStreamEventErrorOccurred. Donc, je pense que ce n'est pas la bonne façon d'utiliser [oStream write]. Quelle est la bonne façon d'utiliser ce message alors? Je trouve ce message renvoie un NSInteger de -1073748088, quel pourrait être le problème?
Qu'est-ce que [ostream streamError] vous donner? – Chuck
L'opération n'a pas pu être terminée. Expiration du délai d'expiration –