0

我已经编写了从 tcp 端口 3000 读取数据的代码

- (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 是我的输入流)

我通过终端将数据传递到 tcp 端口

请帮我

4

1 回答 1

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;
    }
}
于 2012-11-21T11:07:41.057 回答