2012-11-23 36 views
5

bố Trên iPhone (máy chủ), tôi đã cố gắng xuất bản một dịch vụ và mã của tôi chạy vào phương pháp đại biểu các NSNetService đối tượng:NSNetServiceBrowser không tìm thấy dịch vụ

-(void)netServiceDidPublish:(NSNetService *)sender 

Vì vậy, tôi tin rằng dịch vụ của tôi @"_chatty._tcp." đã xuất bản thành công. Sau đó, trên một iPhone (khách hàng), tôi sử dụng NSNetServiceBrowser để tìm dịch vụ của tôi, nhưng nó đã không chạy vào các phương pháp đại biểu:

-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing 

tôi thấy một số câu hỏi liên quan đến trường hợp của tôi trên trang web này, hầu hết các câu trả lời nhắc nhở để kiểm tra các đối tượng đại biểu cho dù là ra khỏi phạm vi hay không. Tôi chắc chắn rằng đại biểu của tôi hoạt động tốt vì nó đã chạy vào một phương thức đại biểu khác như:

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser 

Ai cũng có thể giúp tôi tìm ra lý do?

Dưới đây là một số phần của mã của tôi:

tôi init dịch vụ như thế:

#define MY_PROTOCOL @"_chatty._tcp." 

self.myService = [[NSNetService alloc] 
        initWithDomain:@"" type:MY_PROTOCOL 
        name:@"thaith" port:self.port]; 

Cảng được khởi tạo với một listeningSocket đưa ra trong lớp Trình duyệt:

NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init]; 

//I also retain the finder. 
finder.delegate = self; 

[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""]; 
+0

Tôi cũng phải đối mặt với cùng một vấn đề ... bạn có tìm ra giải pháp cho nó không ?? –

Trả lời

0

Tôi sẽ thu hẹp phạm vi và cố gắng tìm ra nơi có vấn đề. Trước tiên, hãy tìm hiểu xem dịch vụ có được xuất bản chính xác hay không. Sử dụng ứng dụng Bonjour Browser (bạn có thể tìm thấy nó trên Internet) trên một máy tính trong cùng một mạng cục bộ nơi bạn xuất bản dịch vụ. Tôi hy vọng bạn xuất bản và duyệt trong cùng một mạng nội bộ. Nếu Trình duyệt Bonjour có thể xem dịch vụ của bạn thì bạn biết nó được xuất bản chính xác. Sau đó, làm việc ở phía trình duyệt để kết nối với nó.

+0

Cảm ơn đề xuất của bạn, vâng, tôi đã thực hiện một điểm ngắt đối với phương thức ủy nhiệm - (void) netServiceDidPublish: (NSNetService *) và nó chạy vào nó, vì vậy tôi nghĩ dịch vụ của tôi đã thành công. Nó chỉ không chạy vào đại biểu didFIndService –

0

Giải pháp có thể

  1. Kiểm tra cả WiFi định danh là cùng
  2. Kiểm tra cả hai đều trong cùng một mạng WiFi
  3. Kiểm tra các đại biểu NSNetServiceBrowser giao như cùng lớp

Lần tải xuống cuối cùng sam ple Apple.Developer Witap Application, cài đặt trong hai thiết bị, kiểm tra và xác nhận nó hoạt động.

+1

Tôi đã kiểm tra với ví dụ Witap, và nó dường như không làm gì cả, giống như ứng dụng của tôi. Tôi cũng kiểm tra địa chỉ wifi và tôi cấu hình thủ công để làm cho họ cùng một mạng, nhưng vẫn không hoạt động, ứng dụng của tôi và ứng dụng witap. –

9

Sau khi gặp phải vấn đề tương tự và bỏ cuộc trong một tháng. Tôi vừa quay lại và giải quyết nó:

Mặc dù the sample code in the docs dường như ngụ ý khác, không sử dụng biến cục bộ cho NSNetServiceBrowser. Ngay sau khi nó đi ra khỏi phạm vi nó được thu gom rác thải. Đặt finder biến mẫu hoặc thuộc tính để gậy của nó xung quanh. Tôi đã không phát hiện ra điều này ngay lập tức khi các đại biểu netServiceBrowserWillSearch: nhận được gọi là vì vậy tôi giả định tất cả mọi thứ đã được ok ...

+0

Có một mẫu mã tốt ở đây: https://github.com/thesecretlab/LearningCocoa3rdEd/blob/ecc8d34b151c116c4fc3b3296b3c0df1e57171d5/iTunesDetector/iTunesDetector/AppDelegate.m – Ryan

+0

Cảm ơn bạn. Điều này đã khắc phục được sự cố của tôi. – david72

1

Thay vì tải trình duyệt bonjour, tôi khuyên bạn nên sử dụng lệnh terminal:

dns-sd -B _chatty._tcp local. 

Đối với tôi, nó cho thấy rằng phía máy chủ đang làm việc tốt. Hiện tại, tôi có thể tìm thấy dịch vụ khi ứng dụng của tôi bắt đầu, vấn đề duy nhất của tôi là khi tôi ngừng máy chủ, tôi nhận được sự kiện "đã xóa" nhưng chạy lại, tôi không thể phát hiện được nữa. Tôi biết vấn đề là ở phía khách hàng của tôi, nhờ dns-sd - B

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