2017-10-04 9 views
0

원격 컴퓨터의 도커 컨테이너에서 실행중인 SpringBoot 응용 프로그램이 있습니다. (실제로는 Mac의 옆에있는 작은 상자이지만 어쨌든 ...). 또한 Mac에서 로컬로 bootRun을 사용하는 SpringBoot 응용 프로그램으로 실행되는 인스턴스가 있습니다. 이러한 인스턴스는 어떤 식 으로든 연결되지 않습니다. 이 SB 애플리케이션에 의해 노출 된 엔드 포인트로 REST 호출을 내보내는 푸시 알림을 수락하기위한 작은 iOS 테스트 앱이 있습니다. Xcode에서 앱을 설치하는 실제 iPhone이 연결되어 있습니다.NSURLConnection이 원격 IP에 연결할 수 없습니다.

내 Mac의 IP 주소를 사용하여 로컬로 실행되는 bootRun 인스턴스에서 iOS 앱 REST 호출을 가리키면 호출이 올바르게 작동하고 레지스터와 모든 것이 훌륭합니다. 그러나 Docker 인스턴스를 실행하는 원격 시스템에서 iOS를 REST 호출로 지정하면 호출이 실패합니다. 그러나 동일한 URL과 페이로드를 사용하여 터미널에서 curl 명령을 수행하면 올바르게 작동합니다. 따라서 방화벽이나 기타 문제는 없습니다. 보고 된 오류는 다음과 같습니다

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { 

    NSString *newToken = [deviceToken description]; 
    newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
    newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    NSLog(@"Device token is: %@", newToken); 

    NSString *urlString = [NSString stringWithFormat:@"http://111.222.3.4:1234/ios-notification-server/register"]; 
    NSString *body =[NSString stringWithFormat:@"{\"foo\":\"bar\",\"deviceToken\":\"%@\"}", newToken]; 

    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"Bearer custom.token" forHTTPHeaderField:@"Authorization"]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]]; 

    NSURLSession *session = [NSURLSession sharedSession]; 
    [[session dataTaskWithURL:[NSURL URLWithString:urlString] 
      completionHandler:^(NSData *data, 
           NSURLResponse *response, 
           NSError *connectionError) { 

       NSLog(@"Received response: %@, data: %@", response, data); 

       if (data.length > 0 && connectionError == nil) { 
        NSLog(@"Successfully registered"); 
       } else { 
        NSLog(@"Failed to register.: %@", connectionError); 
       } 
      }] resume]; 
} 

아무것도 실패한 인증 또는 아무것도로 원격 서버에 등록하지, 그냥 전화에서 발행하지 않는 것 :

여기
2017-10-04 14:16:18.907472+0100 IosNotificationApp[563:28094] TIC TCP Conn Failed [1:0x1c416a080]: 1:61 Err(61) 
2017-10-04 14:16:18.907716+0100 IosNotificationApp[563:28094] Task <7111CDD1-CB81-410E-B928-AE46E6964184>.<0> HTTP load failed (error code: -1004 [1:61]) 
2017-10-04 14:16:18.908426+0100 IosNotificationApp[563:28093] NSURLConnection finished with error - code -1004 
2017-10-04 14:16:18.918332+0100 IosNotificationApp[563:28048] Received response: (null), data: (null) 
2017-10-04 14:16:18.918822+0100 IosNotificationApp[563:28048] Failed to register.: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo={NSUnderlyingError=0x1c0252330 {Error Domain=kCFErrorDomainCFNetwork Code=-1004 "Could not connect to the server." UserInfo={NSErrorFailingURLStringKey=http://111.222.3.4:1234/ios-notification-server/register, NSErrorFailingURLKey=http://111.222.3.4:1234/ios-notification-server/register, _kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1, NSLocalizedDescription=Could not connect to the server.}}, NSErrorFailingURLStringKey=http://111.222.3.4:1234/ios-notification-server/register, NSErrorFailingURLKey=http://111.222.3.4:1234/ios-notification-server/register, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=61, NSLocalizedDescription=Could not connect to the server.} 

didRegisterForRemoteNotificationsWithDeviceToken 기능입니다 모든. 누구도 Xcode가 왜이 컴퓨터의 로컬 할당 된 IP가 아닌 IP를 호출 할 때이 문제를 일으키는 지 알 수 있습니까? Xcode에는 내 진단에 도움이 될만한 것이 있습니까?

+0

-1004는 NSURLErrorCannotConnectToHost입니다. – Rob

+0

우리는 Mac에서이 상자로 '컬'할 수 있지만 iOS 기기는 전혀 연결할 수 없다는 것을 알고 있습니다. (Wi-Fi를 통해 Mac에 연결할 수는 있지만). – Rob

+0

관련이 없으면 NSURLConnection을 중단하고 대신 NSURLSession을 사용하는 것이 좋습니다. 'sendAsynchronousRequest'처럼 간단합니다. NSURLConnection은 더 이상 사용되지 않습니다. – Rob

답변

0

실제 장치의 경우 System Preferences -> Sharing으로 이동하십시오. Internet Sharing을 클릭하고 To computers using: iPhone USB을 사용하도록 설정합니다.

iPad의 경우 iPad USB을 사용한다고 가정합니다.

관련 문제