2015-09-23 18 views
6

Tôi có một máy chủ chạy cục bộ (IP của tôi là 192.168.0.98) và đã thử nghiệm một số mã mạng để truy cập nó. Nguyên này được thực hiện thông qua AFNetworking, nhưng bây giờ tôi đã thực hiện nó với một NSURLSession như thế này:NSURLSession thất bại khi cố gắng gán cho chúng tôi IP thay vì localhost hoặc home

NSURLSession *session = [NSURLSession sharedSession]; 
NSURL *url = [NSURL URLWithString:@"http://192.168.0.98:8080/api"]; 
NSURLSessionDataTask *task = [session dataTaskWithURL: url 
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
             NSLog(@"Error: %@", error); 
             NSLog(@"Body: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
            }]; 
[task resume]; 

Tôi đã sau đó chạy nó với những 3 URL:

  • http://localhost:8080/api -> Tác phẩm.
  • http://127.0.0.1:8080/api -> hoạt động.
  • http://192.168.0.98:8080/api -> không thành công với các lỗi:

    Error Domain=NSPOSIXErrorDomain 
    Code=2 "No such file or directory" 
    UserInfo={ 
        NSErrorFailingURLStringKey=http://192.168.0.98:8080/api, 
        NSErrorFailingURLKey=http://192.168.0.98:8080api, 
        _kCFStreamErrorCodeKey=2, 
        _kCFStreamErrorDomainKey=1 
    } 
    

đâu 192.168.0.98 là IP được gán cho máy tính này. Nếu tôi chạy các URL này từ PAW hoặc trình duyệt, nó hoạt động tốt. Nhưng từ một bài kiểm tra đơn vị nó không thành công.

Từ quan điểm của dự án của tôi, tôi chỉ có thể sử dụng localhost. Vì vậy, đây không phải là một máy cắt giao dịch. Nhưng tôi tò mò là tại sao nó không hoạt động.

Có ai có bất kỳ ý tưởng nào về vấn đề này không?

+2

khi đoán vì không thể truy cập máy chủ đó hoặc không có quá trình nghe trên cổng 8080 trên địa chỉ đó – Paulw11

+0

Thật vậy; bạn đã thử nghiệm điều này bằng cách sử dụng 'telnet' hoặc' netcat' hay cái gì đó từ dòng lệnh? – trojanfoe

+0

Tôi đã thử nghiệm điều này sử dụng một máy khách REST và nó là tốt với tất cả các URL. 192.168.0.98 thực sự là máy này. Tuyến đường theo dõi hiển thị cùng một tuyến đường cho 192.168.0.98, localhost và 127.0.0.1. Nó chỉ là AfNetworking đang gặp vấn đề với điều này. – drekka

Trả lời

5

tl; dr: Sử dụng tên miền Bonjour local link thay vì địa chỉ IP của bạn.

Tôi chỉ tự mình gặp sự cố này. Tôi đang xây dựng một API cục bộ và không muốn triển khai tới một máy chủ bên ngoài, nhưng tôi cần gọi API từ cả trình mô phỏng cũng như các thiết bị. Tôi đã thử lần đầu tiên bằng cách sử dụng localhost, nhưng tất nhiên điều đó không làm việc cho các thiết bị kể từ khi localhost sẽ là thiết bị chính nó, không phải máy Mac của tôi. Địa chỉ IP hoạt động cho các thiết bị nhưng không hoạt động trong trình mô phỏng. Sau đó, tôi nhớ rằng tôi có thể sử dụng tên miền .local cho máy Mac của mình để có khả năng định địa chỉ mạng khác và chắc chắn nó hoạt động. Tôi có thể sử dụng http://mymac.local/ làm URL cơ sở cho các yêu cầu API của mình trên cả trình mô phỏng cũng như các thiết bị thử nghiệm của tôi.

Tôi không chắc chắn lý do tại sao sử dụng địa chỉ IP thực sự không hoạt động, nhưng điều này có thể cung cấp cho bạn tùy chọn phù hợp với nhu cầu của bạn.

+3

'sudo scutil --get LocalHostName' sẽ cung cấp tên địa phương của bạn để sử dụng trong url: http: //'localHostName'.local/ –

Các vấn đề liên quan