iPhone SDK отправляет строку по Wi-Fi

Я пытаюсь добавить простую опцию к своему приложению, это должно просто отправить предварительную отформатированную строку на другое устройство, очень как WiTap, который делает пример кода. Это походит на очень тривиальную вещь сделать, но я не могу заставить это работать ;(. Как я могу изменить WiTap для отправки строки вместо единственного интервала?

Любые указатели на хорошие учебные руководства были бы большими.

Я действительно смотрел на образец SimpleNetworkStreams, но он пошел путем по моей голове, поскольку я только надеюсь отправлять строку (NSString, символ [], не имейте предпочтения), и не файл.

Посмотревший этот пример также: Как добавить данные для NSOutputStream? но это не полностью помогло также.

6
задан Community 23 May 2017 в 12:07
поделиться

1 ответ

С тех пор я разобрался в этом и решил ответить на свой вопрос здесь, чтобы помочь тем, кто оказался в похожей ситуации.

Каждый раз, когда я хочу отправить какую-либо строку, я использую эту созданную мной вспомогательную функцию:

- (void) send:(NSString *)string {
    const uint8_t *message = (const uint8_t *)[string UTF8String];
    if (_outStream && [_outStream hasSpaceAvailable])
        if([_outStream write:message maxLength:strlen((char *)message)] == -1)
            NSLog(@"Failed sending data to peer");
}

На принимающей стороне это выглядит так:

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

    switch(eventCode) {

    case NSStreamEventHasBytesAvailable:
    {
        if (stream == _inStream) {
            // read it in
            unsigned int len = 0;
            len = [_inStream read:buf maxLength:buffSize];
            buf[len] = '\0';
            if(!len) {
                if ([stream streamStatus] != NSStreamStatusAtEnd)
                        NSLog(@"Failed reading data from peer");
            } else {
                NSString *message = [NSString stringWithUTF8String:(char *)buf];
                // here you do whatever you need with your received NSString *message
            }
        }
    }
}

Буфер определяется так:

#define buffSize 60000
uint8_t buf[buffSize];

60,000 - это достаточно произвольное значение, вы можете изменить его в соответствии с вашими потребностями.

Несколько замечаний по поводу вышесказанного. Хотя буфер для этих строк можно сделать достаточно большим, вы никогда не гарантируете, что получите свою строку за один раз. В реальном приложении вы должны тщательно разработать определенный протокол, на который можно положиться, чтобы проверить, получили ли вы всю строку, и при необходимости объединить строки, полученные во время последующих NSStreamEventов.

4
ответ дан 17 December 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: