Как записать простой метод Ping в Cocoa/Objective-C

Почему бы вам просто не использовать классические индексы с автоинкрементом и установить строку «TS-» перед идентификатором с PHP или, что еще лучше, MySQL?

рабочий пример db-fiddle здесь [ 111]

РЕДАКТИРОВАТЬ после нашего диалога в комментариях ниже:

SELECT CONCAT("TS-", LPAD(id_test, CHAR_LENGTH((SELECT MAX(id_test) FROM TEST)), '0')) AS trackingcode FROM TEST 

db-fiddle рабочий пример адаптивного решения

Так что это самый быстрый и чистый способ достичь своей цели.

Если у вас будет менее 10 строк, коды отслеживания будут «TS-01», «TS-02» и т. Д. ... Если у вас будет менее 100 строк, они будут «TS-001», TS -002 "и т. Д ...

19
задан rjstelling 28 April 2009 в 15:07
поделиться

7 ответов

Похоже, что приведенный ниже код работает синхронно:

const char *hostName = [@"stackoverflow.com"
                        cStringUsingEncoding:NSASCIIStringEncoding];
SCNetworkConnectionFlags flags = 0;
if (SCNetworkCheckReachabilityByName(hostName, &flags) && flags > 0) {
  NSLog(@"Host is reachable: %d", flags);
}
else {
  NSLog(@"Host is unreachable");
}

Примечание: Требуется SystemConfiguration.framework

-7
ответ дан 30 November 2019 в 01:56
поделиться

Посмотрите CFHost и, в частности, CFHostGetReachability . Также доступен пример кода CFHost , который включает в себя процедуру проверки доступности хоста.

2
ответ дан 30 November 2019 в 01:56
поделиться

Позвольте мне попробовать еще раз ... на этот раз авторизация и форматирование лучше; -)

StreamSCNetworkCheckReachabilityByName устарел и НЕ доступен для iPhone.

bool success = false;
const char *host_name = [@"stackoverflow.com" 
                         cStringUsingEncoding:NSASCIIStringEncoding];

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
                                                                        host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);

//prevents memory leak per Carlos Guzman's comment
CFRelease(reachability);

bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && 
                             !(flags & kSCNetworkFlagsConnectionRequired);
if (isAvailable) {
    NSLog(@"Host is reachable: %d", flags);
}else{
    NSLog(@"Host is unreachable");
}

Примечание: SystemConfiguration.framework требуется

35
ответ дан 30 November 2019 в 01:56
поделиться

Ответ, опубликованный Джином Майерсом, работает для меня с использованием "SCNetworkReachabilityCreateWithName" - но только в симуляторе. На моем устройстве (iPod с OS 2.2.1) он всегда возвращает «Хост доступен» даже для бессмысленных адресов, таких как «zzz».

Я что-то не понимаю? Спасибо.

Вот мой код на всякий случай:

From Как написать простой метод Ping в Cocoa / Objective-C

    - (IBAction) TestReachability:(id)sender
{
    bool success = false;
    const char *host_name = [ipAddressText.textcStringUsingEncoding:NSASCIIStringEncoding];
    NSString *imageConnectionSuccess = @"Connected.png";
    NSString *imageConnectionFailed = @"NotConnected.png";

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
                                                                                host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && 
        !(flags & kSCNetworkFlagsConnectionRequired);
    if (isAvailable)
    {
        NSLog([NSString stringWithFormat: @"'%s' is reachable, flags: %x", host_name, flags]);
        [imageView setImage: [UIImage imageNamed:imageConnectionSuccess]]; 
    }
    else
    {
        NSLog([NSString stringWithFormat: @"'%s' is not reachable", host_name]);
        [imageView setImage: [UIImage imageNamed:imageConnectionFailed]]; 
    }
}
0
ответ дан 30 November 2019 в 01:56
поделиться

Обратите внимание, что есть разница между симулятором и настоящим iPhone. Симулятор не является настоящим симулятором, как тот, который предоставляется Android, он использует классы Mac OSX для большинства функций.

Это особенно ад, если есть разница между Mac OSX и iPhonew (например, связка ключей).

-1
ответ дан 30 November 2019 в 01:56
поделиться

Вы ничего не упускаете - «Достижимость» на самом деле не проверяет, что целевой домен действительно достижим, а только оценивает, есть ли выход из машины, с помощью которого целевой домен потенциально доступен. Пока у вас есть исходящее соединение (например, активное беспроводное или проводное соединение) и конфигурация маршрутизации, которая ведет к цели, тогда сайт «достижим», насколько это касается SCNetworkReachability.

13
ответ дан 30 November 2019 в 01:56
поделиться

Проверка связи на iPhone работает несколько иначе, чем на других платформах, из-за того, что у вас нет доступа root. См. Этот образец кода от Apple.

5
ответ дан 30 November 2019 в 01:56
поделиться