Utilisation NSStream - Transfert de fichiers

Bonjour,



Je travail actuellement sur la conception d'une application de transfert de fichiers via le réseau local, via la wifi.

Suite à  mes recherches sur internet, j'essai de transferer mes fichiers grace a NSStream.

Lors de l'écriture de data sur l'outputstream j'obtiens le message d'erreur suivant :

"The operation couldn't be completed. Bad file descriptor".



Voici mon code :


- (void)initStream {<br />
	NSString *urlStr = [[NSString alloc] initWithFormat:@&quot;127.0.0.1&quot;];<br />
	NSURL *iploc;<br />
  <br />
	if (&#33;[urlStr isEqualToString:@&quot;&quot;]) {<br />
		iploc = [NSURL URLWithString:urlStr];<br />
		if (&#33;iploc) {<br />
			NSLog(@&quot;Not a valid URL&quot;);<br />
			return;<br />
		}<br />
	}<br />
	CFReadStreamRef readStream;<br />
	CFWriteStreamRef writeStream;<br />
	CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)[iploc host], 1024, &amp;readStream, &amp;writeStream);<br />
  <br />
	iStream = (__bridge NSInputStream *)readStream;<br />
	[iStream setDelegate:self];<br />
	[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];<br />
	[iStream open];<br />
  <br />
	oStream = (__bridge NSOutputStream *)writeStream;<br />
	[oStream setDelegate:self];<br />
	[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];<br />
	[oStream open];<br />
}<br />
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)eventCode {<br />
	switch (eventCode) {<br />
		case NSStreamEventHasBytesAvailable:<br />
			if (theStream == iStream) {<br />
				//read data<br />
			}<br />
			break;<br />
		case NSStreamEventHasSpaceAvailable:<br />
			if (theStream == oStream) {<br />
				//send data<br />
				NSString *string = [[NSString alloc] initWithFormat:@&quot;TEST SEND TXT.&quot;];<br />
			  <br />
				const uint8_t *rawstring = (const uint8_t *)[string UTF8String];<br />
				int len = [oStream write:rawstring maxLength:strlen((char *)rawstring)];<br />
				NSLog(@&quot;len : %d&quot;, len);<br />
			}<br />
			break;<br />
		case NSStreamEventErrorOccurred:<br />
			NSLog(@&quot;- NSStreamEventErrorOccurred&quot;);<br />
			NSLog(@&quot;Error : %@&quot;, [[oStream streamError] description]);<br />
			break;<br />
		default:<br />
			break;<br />
	}<br />
}<br />




Savez vous d'ou peu venir cette erreur ?

Pensez vous qu'il serait plus adapter de passer par la programmation de socket BSD, en langage C ?



Je vous remercie.

Réponses

  • psychoh13psychoh13 Mothership Developer Membre
    Il faudrait que tu donnes plus d'informations à  propos de cette erreur.



    Quand est-ce que tu reçois ce message ? (premier message au délégué, après d'autres opérations, etc.)

    Es-tu sûr que ton ordi peut accepter une connexion sur ce port ?



    Au passage, pour vérifier que ton urlStr n'est pas vide je te conseille d'utiliser [urlStr length] != 0, ça marche même quand urlStr est nil. De plus, tu ne gères pas correctement la mémoire pour tes deux streams, tu es responsable de ces deux objets donc tu devrais utiliser __bridge_transfer pour transférer la responsabilité à  ARC.
Connectez-vous ou Inscrivez-vous pour répondre.