2014-05-08 48 views
1

我的第一個問題是如何獲取的NSNetServiceDelegatedidAcceptConnectionWithInputStream:outputStream:回調以獲取叫什麼?didAcceptConnectionWithInputStream:outputStream:get如何被調用?

後續問題:我仍然可以在客戶端和服務器之間建立連接,但我從來沒有收到回覆說連接被接受(通過didAcceptConnectionWithInputStream:outputStream:)?

我明白打電話publishWithOptions,同時通過在NSNetServiceListenForConnections選項應該導致NetServiceDelegate回調(didAcceptConnectionWithInputStream:outputStream:)被調用。但是,該回調沒有被調用。

這裏是我採取的步驟,來發布:

  1. 與創建NSNetService

    self.netService = [[NSNetService頁頭] initWithDomain:@ 「」 類型:_serviceType 名稱: (_name ==零)? @「」:_name port:0];在當前runloop

  2. 計劃服務,在默認模式下

  3. 將委託我的服務器包裝對象
  4. 呼叫publishWithOptions:NSNetServiceListenForConnections

這裏是我採取的步驟,瀏覽服務:

  1. 創建NSNetServiceBrowser,及其委託設置爲我的客戶包裝對象
  2. 呼叫searchForServicesOfType在一個UITableView的UI,同樣的服務類型和域NSNetService
  3. 列表服務,允許用戶選擇服務
  4. 當用戶選擇一個服務,服務的委託設置爲我的客戶對象,並調用getInputStream:outputSteam:的服務
  5. 的getInputStream後:outputSteam:返回成功,我希望didAcceptConnectionWithInputStream:outputStream:來調用。但是,這不會發生。

感謝您的幫助!

+0

你弄明白了嗎? – Legolas

回答

1

的問題是,必須didAcceptConnectionWithInputStream:outputStream:從側面接受連接被調用。

一旦服務可用,你調用get流

[service getInputStream:&istream outputStream:&ostream]

一旦發生這種情況在側接收到請求的委託方法

- (void)netService:(NSNetService *)sender didAcceptConnectionWithInputStream:(NSInputStream *)inputStream outputStream:(NSOutputStream *)outputStream 

將被稱爲

+0

是的,我明白'didAcceptConnectionWithInputStream:outputStream:'必須從接受連接的一方調用。在我的情況下,服務器也作爲客戶端,仍然沒有調用回調方法'didAcceptConnectionWithInputStream:outputStream:'。 – Sheamus

0

這都是懶惰初始化的一部分。

調用getInputStream:outputStream:會給你兩個完美的NSStreams準備使用。所以說,你想寫一些數據?首先打開寫入流...

BAM! netService:didAcceptConnectionWithInputStream:outputStream:被調用。

1

根據我的經驗,這不是在客戶端調用getInputStream:outputStream:導致didAcceptConnectionWithInputStream:outputStream:在服務器上被調用的行爲。

客戶端在撥打getInputStream:outputStream:後,您的客戶端需要撥打[inputStream open][outputStream open],然後調用didAcceptConnectionWithInputStream:outputStream: