クライアント アプリとサーバー アプリの間で 2 つの NSStreams ペア (入力/出力) を開いています。これら 2 つのストリームを同じサーバー側オブジェクトに関連付ける必要があります。2 ストリーム アプローチは、didAcceptConnectionWithInputStream が 2 回呼び出されることを意味します。クライアントからの各ストリーム オープン コマンドに対して 1 回です。両方の open コマンドは、一方が他方の直後に順次実行されます。2 つのオープンが連携してサーバー側でペアリングされることを利用してみましたが、2 つの異なるクライアントが同時に接続しようとすると、競合状態とストリームの混乱の問題が確実にあります。
サービスに接続するときに送信できるキーと値のペアがあれば完璧で、クライアントを識別するためにクライアント生成の GUID を送信できます。
IP アドレスによる識別は、クライアントがローカル ネットワーク上にある (NAT をトラバースする必要がない) ため可能な解決策ですが、NSNetService で実装するのは複雑に思えます。