如何使用Swift接收UDP数据?

时间:2019-05-13 16:56:14

标签: swift sockets udp

我需要从UDP客户端发送或从UDP客户端接收一些数据(字符串)。 我可以使用下面的代码将数据发送到客户端,但是如何实现读取数据呢?我已经阅读了成千上万的页面和示例,但是我无法弄清楚。有人可以修改我的代码,使其能够从UDP设备发送和接收数据吗?

我的代码来自这里: How to implement UDP client and send data in Swift on iPhone?

详细信息: 我正在使用特定的IP和端口将字符串发送到ESP32设备。 然后该设备将进行一些计算并返回一些数据(字符串)。因此,在将数据字符串发送给它之后,我将需要接收该数据。 我可以使用下面提供的代码发送字符串,但是我不知道如何修改以通过UDP从ESP32设备接收数据。

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)
}

0 个答案:

没有答案