iOS Hello World через сокет - PullRequest
       1

iOS Hello World через сокет

4 голосов
/ 29 ноября 2011

Мне нужно реализовать простое сокетное взаимодействие (строки) между приложением iOS и моим сервером сокетов Java.Мне удается соединить два, но я не могу отправлять сообщения.Сервер Java в значительной степени взят из этого примера , и это часть моего кода, где я устанавливаю соединение и (пытаюсь) отправить сообщение на сервер:

- (void)initNetworkCommunication {
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.0.10", 2004, &readStream, &writeStream);
self.inputStream = objc_unretainedObject(readStream);
self.outputStream = objc_unretainedObject(writeStream);
[self.inputStream setDelegate:self];
[self.outputStream setDelegate:self];
[self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.inputStream open];
[self.outputStream open];
}

- (void)sendMessage {
NSString *response  = [NSString stringWithFormat:@"aaa"];
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
[self.outputStream write:[data bytes] maxLength:[data length]];
}

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

NSLog(@"stream event %i", streamEvent);

switch (streamEvent) {

    case NSStreamEventOpenCompleted:
        NSLog(@"Stream opened");
        break;
    case NSStreamEventHasBytesAvailable:

        if (theStream == self.inputStream) {

            uint8_t buffer[1024];
            int len;

            while ([self.inputStream hasBytesAvailable]) {
                len = [self.inputStream read:buffer maxLength:sizeof(buffer)];
                if (len > 0) {

                    NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

                    if (nil != output) {

                        NSLog(@"server said: %@", output);
                        //[self messageReceived:output];

                    }
                }
            }
        }
        break;


    case NSStreamEventErrorOccurred:

        NSLog(@"Can not connect to the host!");
        break;

    case NSStreamEventEndEncountered:

        [theStream close];
        [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        theStream = nil;

        break;
    default:
        NSLog(@"Unknown event");
}

}
- (IBAction)loginButtonClicked {
[self initNetworkCommunication];
[self sendMessage];
...}

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Слишком поздно для ответа .. Надеюсь, это кому-нибудь поможет ...

Чтобы отправить строку через сокеты, вы должны отметить конец строки.то есть;Добавьте \ n

Для приведенного выше примера:

Метод: sendMessage

NSString *response  = [NSString stringWithFormat:@"aaa\n"];
0 голосов
/ 15 августа 2012

Лучше добавить что-то, что не может быть напечатано - например, 0x00 - в конце. Таким образом, ваше сообщение может содержать что угодно.

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