BlueSocket - операция не разрешена - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь отправить дейтаграммы UDP на сервер.Следующий код работает нормально, если мое устройство iOS подключено к Wi-Fi, но когда я переключаю его на операторскую сеть (T-Mobile), происходит сбой с ошибкой Error code: -9980(0x-26FC), Operation not permitted.

Я использую BlueSocket .Я просмотрел страницу с их проблемами, но, похоже, ни у кого нет такой же проблемы, как у меня.

Эта ошибка возникает на моем физическом устройстве (iPhone SE, iOS 12.1).Симулятор (XR) работает нормально, подключаюсь ли я через Wi-Fi или настраиваю точку доступа с тем же физическим телефоном, с которым у меня возникла проблема (например, Simulator –> MacBook –> iPhone).

public func connect() {
    mConnect = true
    let queue1: DispatchQueue? = DispatchQueue.global(qos: .userInteractive)
    let queue2: DispatchQueue? = DispatchQueue.global(qos: .userInteractive)

    guard let pQueue = queue1 else {
        print("Unable to access global interactive QOS queue")
        return
    }

    guard let pQueue2 = queue2 else {
        print("Unable to access global interactive QOS queue2")
        return
    }

    do {
        // Create the socket..
        mVideoSocket = try Socket.create(family: .inet, type: .datagram, proto: .udp)
        pQueue.async { [unowned self, mVideoSocket] in
            do {
                while self.mConnect {
                    print("Listening...")

                    var data = Data()
                    let (bytesRead, addressObj) = try self.mVideoSocket.listen(forMessage: &data, on: Int(self.mLocalPort))
                    let payload = String(data: data, encoding: String.Encoding.utf8)!
                    var payloadSplit = payload.components(separatedBy: ":")
                    let (address, port) = Socket.hostnameAndPort(from: addressObj!)!
                    print("Bytes read = \(bytesRead), Address = \(address), Port = \(port), Payload = \(payload)")

                    if payloadSplit[0] == "1" {
                        //from server, get ip:port
                        print("Exchange")
                        self.mVideoIp = payloadSplit[1]
                        self.mVideoPort = Int32(payloadSplit[2])!
                        try self.mVideoSocket.write(from: "punch", to: Socket.createAddress(for: self.mVideoIp, on: self.mVideoPort)!)
                    }
                    else if payloadSplit[0] == "2" {
                        //from punching!
                        print("Got Punched from address=\(address), port=\(port)")
                        try self.mVideoSocket.write(from: "punched", to: Socket.createAddress(for: address, on: port)!)
                    }
                    else if payloadSplit[0] == "3" {
                        //got punched
                        print("Device Acked Punch")
                    }
                }
            } catch let error {
                print("testListenUDP1 Error reported: \(error)")
            }
        }

        usleep(1000000)
        pQueue2.async { [unowned self, mVideoSocket] in
            do {
                if self.mMode == .recorder {
                    try self.mVideoSocket.write(from: "recorder", to: Socket.createAddress(for: "MyHost", on: 5001)!)
                }
                else {
                    try self.mVideoSocket.write(from: "viewer", to: Socket.createAddress(for: "MyHost", on: 5001)!)
                }
            } catch let error {
                print("overhere: \(error)")
            }
        }
    } catch let error {
        print("testListenUDP2 Error reported: \(error)")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...