UDP NWConnection, указывающий localEndpoint, работает для адреса IPv4, но не для адреса IPv6 - PullRequest
0 голосов
/ 12 июня 2019

Я использую код, предоставленный С.Блинцовым Как работать с 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

Как я могу решить проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...