Pergunta

Eu estou tentando acesso 61616 em meu aplicativo iPhone eo código SCReachability indica que eu tenho uma rede válida, mas eu tempo tentando escrever para 61616. Alguém sabe:

A. Se a rede iPhone EDGE / 3G tem um intervalo de portas limitado ou não tem permissão para conectar a esta porta?

B. Como posso verificar explicitamente para o acesso a esta porta. Aqui é o meu "é a rede acessível" código (emprestado de exemplos da Apple), que verifica a existência de "foo.bar.com" mas não mostra como verificar se há "foo.bar.com:61616".

Qualquer ajuda é apreciada!

- (BOOL)isDataSourceAvailable{
static BOOL checkNetwork = YES;
BOOL _isDataSourceAvailable = NO;
if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
    checkNetwork = NO;

    Boolean success;    
    const char *host_name = "foo.bar.com";

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
    CFRelease(reachability);
}
return _isDataSourceAvailable;

}

Foi útil?

Solução

A API SCNetworkReachability apenas verifica se o endereço pode ser encaminhado para. Citando a documentação:

"acessibilidade" reflete se a dados pacote, enviado por uma aplicação em a pilha de rede, pode deixar o local, computador. Note-se que a acessibilidade faz não garante que o pacote de dados vai realmente ser recebido pelo anfitrião.

Isto não tem nada a ver com NAT ou restrições de porta. O roteamento é baseado em endereços - não nas portas. Então tudo que você pode descobrir (via SCNetworkReachability API) é se você pode (em teoria) atingir o interface do equipamento. Ele não tenta estabelecer uma conexão em uma determinada porta.

Assim, a fim de descobrir se esse serviço está acessível você terá que tentar e testar a si mesmo. De preferência, quando o API SCNetworkReachability diz que uma conexão pode ser estabelecida. Basta tentar se conectar ao servidor na porta 61616 e veja se você receber uma ligação ou um tempo limite. valores de tempo limite e manuseio apropriado é crucial aqui.

Outras dicas

Isso é algo que varia muito de não apenas operadora para operadora, mas de contrato para contrato. Por exemplo, aqui no Reino Unido O2 restringir o acesso à Internet apenas para endereços da web (presumivelmente portas 80 e 443, mas eu não verificar) para os clientes pay-as-you-go, mas permitir o acesso mais ou menos livre para pessoas com contrato. (Espero que seja um pouco mais aberto para os clientes iPhone repartição.)

Eu acho que o resultado prático disto é que você não pode assumir o acesso a portas altas em todo o mundo.

Eu não tenho certeza que há uma maneira simples de verificar que uma determinada porta está aberta, provavelmente a sua melhor opção é usar um tempo limite "razoável". Claro, há uma série de razões que você pode obter o tempo limite para que o seu erro teria que ser adequado vaga.

Se o seu iPhone está conectado ao longo EDGE / Mobile, pode ser atrás de um gateway NAT, assim, você não conseguir entrar em contato com ele. Pelo menos esse é o caso com a T-Mobile Alemanha. O iPhone obtém um endereço RFC IP pela T-Mobile (172.16.x.x).

Eu testá-lo com o iPhone conectado ao seu local de rede Wi-Fi e - se possível - geralmente projetar o aplicativo de uma forma que os contatos do iPhone um servidor e, em seguida, o servidor pode se comunicar com o telefone

.

Você está tentando entrar em contato com o seu iPhone a partir de uma máquina externa?

Isso provavelmente não funciona. Normalmente, os GPRS / EDGE / UMTS blocos de infra-estrutura conexões de entrada. Caso contrário, um assinante móvel pode ser cobrado para o tráfego indesejado, ele não solicitou. (Imagine alguém ping seu iPhone uma vez por segundo para as próximas seis semanas. Você pagaria por isso ...)

A solução é estabelecer uma conexão entre o dispositivo móvel ao computador remoto e, em seguida, deixar que o uso da máquina remota que para o tráfego.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top