Как получить данные UDP используя Swift? - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно отправить, а затем получить некоторые данные (строку) от / к клиенту UDP. Я могу отправить данные клиенту с кодом ниже, но как я могу также реализовать чтение данных? Я прочитал тысячи страниц и примеров, но я просто не могу понять это. Может кто-нибудь изменить мой код, чтобы он мог отправлять и получать данные с устройства UDP?

Мой код отсюда: Как реализовать клиент UDP и отправлять данные в Swift на iPhone?

Подробнее: Я отправляю строку на устройство ESP32 с определенным IP-адресом и портом. тогда это устройство выполнит некоторые вычисления и вернет некоторые данные (строку) обратно. Поэтому мне нужно будет получить эти данные после того, как я отправил на них строку данных. Я могу отправить строку с указанным ниже кодом, но я не знаю, как изменить прием данных с моего устройства ESP32 также через UDP.

import Foundation

func udpSend(textToSend: String, address: in_addr, port: CUnsignedShort) {


func htons(value: CUnsignedShort) -> CUnsignedShort {
    return (value << 8) + (value >> 8);
}

let fd = socket(AF_INET, SOCK_DGRAM, 0) // DGRAM makes it UDP

let addr = sockaddr_in(
    sin_len:    __uint8_t(MemoryLayout<sockaddr_in>.size),
    sin_family: sa_family_t(AF_INET),
    sin_port:   htons(value: port),
    sin_addr:   address,
    sin_zero:   ( 0, 0, 0, 0, 0, 0, 0, 0 )
)

let sent = textToSend.withCString { cstr -> Int in

    var localCopy = addr

    let sent = withUnsafePointer(to: &localCopy) { pointer -> Int in
        let memory = UnsafeRawPointer(pointer).bindMemory(to: sockaddr.self, capacity: 1)
        let sent = sendto(fd, cstr, strlen(cstr), 0, memory, socklen_t(addr.sin_len))
        return sent
    }

    return sent
}

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