2012-11-21 76 views
0

我写的代码读取数据从TCP端口的数据3000着读TCP端口

- (BOOL)connect 
{ 
int cIter = 0; 
while(cIter++<5) 
{ 
    CFReadStreamRef readStream; 
    CFWriteStreamRef writeStream; 
    @try{ 
     CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)M_CONNECT_HOST, M_CONNECT_PORT, &readStream, &writeStream); 
    } 
    @catch (NSException *ex) { 

    } 
    if(readStream!=nil && writeStream!=nil) 
    { 
     m_sin = (__bridge NSInputStream *)readStream; 
     m_sout = (__bridge NSOutputStream *)writeStream; 
     [m_sin setDelegate:self]; 
     [m_sout setDelegate:self]; 

     [m_sin scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
     [m_sout scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
     [m_sin open]; 
     [m_sout open]; 

     return true; 
    } 
} 
return false; 
} 

当我写为tcp输出流的工作,但是当我尝试从TCP输入读取数据流的不读我的意思是我的 [m_sin read:t maxlength:10]; 总是返回-1(其中m_sin是我的输入流)

和IM通过终端

的数据传递到TCP端口请帮我

+0

'[NSInputStream streamError]'返回什么? – trojanfoe

+0

[NSInputStream streamError]返回“操作无法完成。错误的地址” – Deepak

回答

0

落实的handleEvent和检查出来的eventCode

-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{ 

    switch (eventCode) { 
     case NSStreamEventOpenCompleted: 
      NSLog(@"stream opened"); 
      break; 

     case NSStreamEventHasBytesAvailable:    

      if (aStream == inputStream) { 
       // read it in 
       unsigned int len = 0; 
       len = [inputStream read:buf maxLength:1019]; 
       buf[len] = '\0'; 

       if(!len) { 

        if ([aStream streamStatus] != NSStreamStatusAtEnd){ 

         NSLog(@"Failed reading data from peer"); 

        } 

       } else { 

        //I am reading UIImage here     
        NSData *data = [NSData dataWithBytes:(const void *)buf length:1019];      
        UIImage *image = [UIImage imageWithData:data]; 
        self.transferedimage.image = image; 


       } 
      } 

      break; 

     case NSStreamEventErrorOccurred: 
      NSLog(@"stream ErrorOccurred"); 
      break; 

     case NSStreamEventEndEncountered: 
      NSLog(@"stream EndEncountered"); 
      break; 

     default: 
      NSLog(@"stream UnKnown"); 
      break; 
    } 
} 
+0

我试过使用你的代码,但是这个“案例NSStreamEventHasBytesAvailable:”案例从来没有真实 – Deepak

+0

使用本教程首先创建一个基于Socket的iPhone应用程序http:// www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server –

+0

或查看http://developer.apple.com/library/ios/#samplecode/WiTap /Introduction/Intro.html –