NSStream을 사용하여 연결하는 클라이언트 - 서버 앱이 있습니다. 때로는 연결을 열려고 할 때 처음에는 메시지를 보낼 때 연결의 한 쪽에서 NSStreamEventEndEncountered를 얻습니다.NSStream에서 NSStreamEventEndEncountered를받습니다.
저는 CFStream과 NSStream 사이에서 브리지를 사용합니다. 내 서버와 소켓을 만들기 : handleConnect 콜백 함수에서
_ipv4cfsock = CFSocketCreate(kCFAllocatorDefault,PF_INET, SOCK_STREAM,IPPROTO_TCP, kCFSocketAcceptCallBack, handleConnect, &info);
, CFStreamCreatePairWithSocket
두 CFStream를 가져 오는 데 사용됩니다.
내 클라이언트는 CFStreamCreatePairWithSocketToHost
을 사용하여 호스트에 연결합니다.
클라이언트가 연결 (NSStream 생성) 한 다음 ping을 보냅니다. 내 서버가 연결을 받으면 NSStream을 열고 ping을 받으면 pong을 보냅니다.
연결 중 하나가 닫히면 스트림에서 kCFStreamPropertyShouldCloseNativeSocket
을 true로 설정 했으므로 다른 하나가 NSStreanEventEndEncountered를 가져와야합니다.
몇 가지 다른 결과가 있습니다. NSLog를 사용하여 어떤 일이 발생했는지 확인했습니다.
- 연결이 예상대로 작동하는 대부분의 시간.
Server did recieve new connection
Server recieved ping
Server Sent pong
Client recieved pong
- 퐁을 보내려고 할 때 연결이 닫힙니다 (NSStreamEventEndEncountered). 핑을 보내려고 할 때 클라이언트는 탁구를받을 만
Server did recieve new connection
Server recieved ping
Server recieved pong
Server closed
Client closed
년 - 연결 닫히고 NSStreamEventEndEncountered
(NSStreamEventEndEncountered)를받을 수 없습니다.Server did recieve new connection;
Error recieved: The operation couldn’t be completed. Connection reset by peer
클라이언트와 서버는 내 컴퓨터에있는 : 핑을 보내려고 할 때 서버는
Server did recieve new connection
Client closed
-an 오류가 받았다 된 핑을받을 또는 NSStreamEventEndEncountered하지 않습니다. 쓰려고하면 스트림이 NSStreamEventEndEncountered를 얻는 이유는 무엇입니까?