import Network
let connection = NWConnection(host: "mail.example.com", port: .imaps, using: .tls)
connection.stateUpdateHandler = { (newState) in
switch newState {
case .ready:
// 연결이 구성완료 되었을 때
// TCP와 TLS는 핸드셰이킹이 끝난 상태
case .waiting(let error):
// 네트워크 연결이 구성되지 않고 경로를 찾고 있는 과정
case .failed(let error):
// 네트워크 연결이 끊어지거나 연결을 하지 못한 경우
}
}
connection.start(queue: myQueue)
//셀룰러 제한
parameters.prohibitedInterfaceTypes = [.celluar]
//v6만 사용하도록 제한
if let ipOptions = parameters.defaultProtocolStack.internetProtocol as? NWProtocolIP.Options {
ipOptions.version = .v6
}
// 프록시 비선호
parameters.preferNoProxies = true
네트워크를 찾지 못한 경우 waiting 상태로 이동
성공하면 Ready, 실패하면 failed
가장 마지막에는 cancelled로 끝남
라이브 스트리밍 예시
받는 쪽에서는 NWListener 사용
do {
if let listener = try NWListener(parameters: .udp)
listener.service = NWListener.Service(type: "_camera._udp")
listener.newConnectionHandler = { (newConnection) in
newConnection.start(queue: myQueue)
}
listener.start(queue: myQueue)
} catch {
// 리스너 생성 오류 처리
}
func sendFrame(_ connection: NWConnection, frame: Data) {
connection.send(content: frame, completion: .contentProcessed { sendError in
if let sendError = sendError {
// 에러 처리
} else {
// 다음 데이터가 있는지 확인해서 재송출
let nextFrame = generateNextFrame()
sendFrame(connection, frame: nextFrame)
}
}
}