我想开发UDP客户端并在Swift中发送数据。
我参考了以下链接:
Swift: Receive UDP with GCDAsyncUdpSocket
Retrieving a string from a UDP server message
但我找不到在UDP
中实施Swift
的好方法。
有人可以教我吗如何在iPhone上使用Swift实现UDP客户端和发送数据?
答案 0 :(得分:2)
对我来说,我使用this及其用法:
broadcastConnection = UDPBroadcastConnection(port: 35602) { [unowned self] (response: (ipAddress: String, port: Int, response: [UInt8])) -> Void in
print("Received from \(response.ipAddress):\(response.port):\n\n\(response.response)")
}
答案 1 :(得分:0)
这看起来像是对Swift UDP Connection的欺骗。
稍微重构一下这个例子:
let INADDR_ANY = in_addr(s_addr: 0)
udpSend("Hello World!", address: INADDR_ANY, port: 1337)
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
var addr = sockaddr_in(
sin_len: __uint8_t(sizeof(sockaddr_in)),
sin_family: sa_family_t(AF_INET),
sin_port: htons(port),
sin_addr: address,
sin_zero: ( 0, 0, 0, 0, 0, 0, 0, 0 )
)
textToSend.withCString { cstr -> Void in
withUnsafePointer(&addr) { ptr -> Void in
let addrptr = UnsafePointer<sockaddr>(ptr)
sendto(fd, cstr, strlen(cstr), 0, addrptr, socklen_t(addr.sin_len))
}
}
close(fd)
}
如果您将目标IP作为字符串,请使用inet_pton()将其转换为in_addr。像这样:
var addr = in_addr()
inet_pton(AF_INET, "192.168.0.1", &buf)
随意从此处窃取代码:SwiftSockets
哦,如果您计划进行任何严肃的网络编程,请抓住这本书:Unix Network Programming
答案 2 :(得分:0)
经过相当广泛的研究,只提出了对GCD的AsyncSocket的基本指示,并且是一个纯粹的Swift训练的iOS程序员,我寻找了一些原生的Swift套接字支持。
值得庆幸的是,我找到了一个更简单的替代方法来使用Async,称为SwiftSocket。
github(https://github.com/xyyc/SwiftSocket)包含大多数套接字的示例,可以通过将几个文件复制到项目中来使用。
对于仅限swift的开发者,我觉得它未得到充分利用,很快就会替换非客观的应用程序的Async。然后我又对这些东西很陌生,所以我可能会离开:D
答案 3 :(得分:0)
非常好的样本! 我的两分钱..固定为快速4.2。 / Xcode 10, (我喜欢使用20行而不是一堆其他文件..和Pods ..)。 添加了更多返回结果。
Remove
}