Разные способы создания сокет-соединения с iPhone и Android? - PullRequest
0 голосов
/ 18 мая 2011

Я пишу код для открытия сокета, соединяющегося с сервером с определенным портом. По какой-то причине я не могу заставить его работать. Я не уверен, что все, что я делаю, правильно или нет, но мне нужен пример кода.

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Также проверьте следующий код, он прекрасно работает ...

- (IBAction)sendCommand:(id)sender {

    NSHost *host = [NSHost hostWithAddress:@"111.111.111.111"];
    if (host != nil)
    {       
        // iStream and oStream are instance variables
        [NSStream getStreamsToHost:host port:2222 inputStream:&iStream outputStream:&oStream];

                //iStream is instance var of NSSInputStream
        [iStream retain];
        [iStream setDelegate:self];
        [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [iStream open];

                //oStream is instance var of NSSOutputStream
        [oStream retain];
        [oStream setDelegate:self];
        [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [oStream open];     

        NSError *streamError;
        streamError = [iStream streamError];
        streamError = [oStream streamError];

        NSStreamStatus streamStatus;
        streamStatus = [iStream streamStatus];
        streamStatus = [oStream streamStatus];
    }
}

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
{
    NSString *io;
    if (theStream == iStream) io = @">>";
    else io = @"<<";

    NSString *event;
    switch (streamEvent)
    {
        case NSStreamEventNone:
            event = @"NSStreamEventNone";
            resultText.font = [UIFont fontWithName:@"Helvetica" size:10.0];
            resultText.textColor = [UIColor whiteColor];
            resultText.text = [[NSString alloc] initWithFormat: @"Can not connect to the host!"];
            break;
        case NSStreamEventOpenCompleted:
            event = @"NSStreamEventOpenCompleted";
            break;
        case NSStreamEventHasBytesAvailable:
            event = @"NSStreamEventHasBytesAvailable";
            if (theStream == iStream)
            {
                                //read data
                uint8_t buffer[1024];
                int len;
                while ([iStream hasBytesAvailable])
                {
                    len = [iStream read:buffer maxLength:sizeof(buffer)];
                    if (len > 0)
                    {
                        NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
                        NSData *theData = [[NSData alloc] initWithBytes:buffer length:len];
                        if (nil != output)
                        {
                                                   //do something with data
                        }
                    }
                }
            }
            break;
        case NSStreamEventHasSpaceAvailable:
            event = @"NSStreamEventHasSpaceAvailable";
            if (theStream == oStream)
            {
                                //send data
                uint8_t buffer[11] = "I send this";             
                int len;

                len = [oStream write:buffer maxLength:sizeof(buffer)];
                if (len > 0)
                {
                    NSLog(@"Command send");
                    [oStream close];
                }
            }
            break;
        case NSStreamEventErrorOccurred:
            event = @"NSStreamEventErrorOccurred";
            resultText.font = [UIFont fontWithName:@"Helvetica" size:10.0];
            resultText.textColor = [UIColor whiteColor];
            resultText.text = [[NSString alloc] initWithFormat: @"Can not connect to the host!"];
            break;
        case NSStreamEventEndEncountered:
            event = @"NSStreamEventEndEncountered";
            [theStream close];
            [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [theStream release];
            theStream = nil;

            break;
        default:
            event = @"** Unknown";
    }

    NSLog(@"%@ : %@", io, event);
}
0 голосов
/ 18 мая 2011

Вы можете обратиться по следующей ссылке, которая дает пример.

http://dev.im.ethz.ch/wiki/Socket_communication_on_the_iPhone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...