NSStream を使用して接続するクライアント - サーバー アプリがあります。接続を開こうとすると、最初にメッセージを送信しようとしたときに、接続の一方が NSStreamEventEndEncountered を取得することがあります。
CFStream と NSStream の間のブリッジを使用します。私のサーバーはソケットを作成します:
_ipv4cfsock = CFSocketCreate(kCFAllocatorDefault,PF_INET, SOCK_STREAM,IPPROTO_TCP, kCFSocketAcceptCallBack, handleConnect, &info);
handleConnect コールバック関数でCFStreamCreatePairWithSocket
は、2 つの CFStream を取得するために使用されます。
私のクライアントはCFStreamCreatePairWithSocketToHost
、ホストに接続するために使用します。
クライアントは接続 (NSStream を作成) し、ping を送信します。私のサーバーは接続を受信すると NSStream を開き、ping を受信するとポンを送信します。
kCFStreamPropertyShouldCloseNativeSocket
接続の1つが閉じると、ストリームでtrueに設定したため、もう1つはNSStreanEventEndEncounteredを取得する必要があります。
いくつかの異なる結果が得られました。何が起こっているのかを確認するために NSLog を使用しました。
-ほとんどの場合、接続が開き、期待どおりに機能します。
Server did recieve new connection
Server recieved ping
Server Sent pong
Client recieved pong
-ポンを送信しようとすると、接続が閉じます (NSStreamEventEndEncountered)。クライアントは pong を受信しませんが、NSStreamEventEndEncountered を受信します
Server did recieve new connection
Server recieved ping
Server recieved pong
Server closed
Client closed
- ping を送信しようとすると、接続が閉じます (NSStreamEventEndEncountered)。サーバーが ping または NSStreamEventEndEncountered を受信しない
Server did recieve new connection
Client closed
-ping を送信しようとしたときにエラーが発生しました:
Server did recieve new connection;
Error recieved: The operation couldn’t be completed. Connection reset by peer
クライアントとサーバーの両方が私のコンピューターにあります。書き込もうとすると、ストリームが NSStreamEventEndEncountered を取得するのはなぜですか?