簡體   English   中英

didAcceptConnectionWithInputStream:outputStream:如何被調用?

[英]How does didAcceptConnectionWithInputStream:outputStream: get called?

我的第一個問題是如何在NSNetServiceDelegate中獲取didAcceptConnectionWithInputStream:outputStream:回調以進行調用?

后續問題:盡管我從未收到表示已接受連接的回調(通過didAcceptConnectionWithInputStream:outputStream: ,但我仍然可以在客戶端和服務器之間建立連接嗎?

我知道在傳遞NSNetServiceListenForConnections選項的同時調用publishWithOptions應該導致NetServiceDelegate回調( didAcceptConnectionWithInputStream:outputStream:被調用。 但是,該回調不會被調用。

這是我要發布的步驟:

  1. 使用創建NSNetService

    self.netService = [[NSNetService alloc] initWithDomain:@“”類型:_serviceType名稱:(_ name == nil)嗎? @“”:_name port:0];

  2. 在默認模式下,在當前運行循環中計划服務

  3. 將委托設置為我的服務器包裝對象
  4. 調用publishWithOptions:NSNetServiceListenForConnections

這是我瀏覽服務的步驟:

  1. 創建一個NSNetServiceBrowser ,並將其委托設置為我的客戶端包裝對象
  2. 呼叫searchForServicesOfType相同的服務類型和域NSNetService
  3. 在用於用戶界面的UITableView列出服務,以允許用戶選擇服務
  4. 當用戶選擇服務時,將服務的委托設置為我的客戶端對象,然后在服務上調用getInputStream:outputSteam:
  5. 在getInputStream:outputSteam:返回成功之后,我希望didAcceptConnectionWithInputStream:outputStream:被調用。 但是,這不會發生。

謝謝你的幫助!

問題是必須從接受連接的一側調用didAcceptConnectionWithInputStream:outputStream:

服務可用后,您致電獲取流

[service getInputStream:&istream outputStream:&ostream]

一旦這發生在接收請求的一方,委托方法

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

將被稱為

以我的經驗,並不是導致客戶端上調用didAcceptConnectionWithInputStream:outputStream:的客戶端上調用getInputStream:outputStream:的行為。

在客戶端上,在調用getInputStream:outputStream: ,您的客戶端需要在調用didAcceptConnectionWithInputStream:outputStream:之前調用[inputStream open][outputStream open]

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

調用getInputStream:outputStream:將為您提供兩個可以立即使用的非常不錯的NSStreams。 那么,說,您想寫一些數據嗎? 首先,打開寫入流...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM