Я использую код, предоставленный С.Блинцовым Как работать с UDP-сокетами в iOS, swift? Однако я также хочу указать "requiredLocalEndpoint".При этом следующий код работает для адреса IPv4, но для адреса IPv6 соединение останавливается в состоянии подготовки.
func connectToGroupUDP2(_ hostUDP: NWEndpoint.Host, _ portUDP: NWEndpoint.Port) {
// Set requiredLocalNWEndpoint
let devicePort = NWEndpoint.hostPort(host: NWEndpoint.Host.ipv6(IPv6Address(cellularIp!)!), port: 54712)
print("\(devicePort)")
let parameters = NWParameters.udp
print("\(parameters)")
parameters.requiredLocalEndpoint = devicePort
print("\(parameters)")
connectionGroup2 = NWConnection(host: hostUDP, port: portUDP, using: parameters)
let messageToUDP = "group2"
connectionGroup2?.stateUpdateHandler = { (newState) in
print("This is group2 stateUpdateHandler:")
switch (newState) {
case .ready:
print("State: Ready\n")
sendGroupUDP2(messageToUDP)
case .setup:
print("State: Setup\n")
case .cancelled:
print("State: Cancelled\n")
case .preparing:
print("State: Preparing\n")
default:
print("ERROR! State not defined!\n")
}
}
connectionGroup2?.start(queue: .global())
}
Консоль XCode показывает следующие распечатки:
2001:b400:e401:c376:554b:48b9:9a89:a81.54712
udp, indefinite
udp, local: 2001:b400:e401:c376:554b:48b9:9a89:a81.54712, indefinite
This is group2 stateUpdateHandler:
State: Preparing
Однако код работает для адреса IPv4,
let devicePort = NWEndpoint.hostPort(host: NWEndpoint.Host.ipv4(IPv4Address(wifiIp!)!), port: 54712)
Распечатки следующие,
192.168.1.103:54712
udp, indefinite
udp, local: 192.168.1.103:54712, indefinite
This is group2 stateUpdateHandler:
State: Preparing
This is group2 stateUpdateHandler:
State: Ready
group2 was sent to groupServer2
Как я могу решить проблему?