如何在iPhone上实现UDP客户端并在Swift中发送数据?

我想开发UDP客户端并在Swift中发送数据。

我参考了以下链接:

Swift:使用GCDAsyncUdpSocket接收UDP

从UDP服务器消息中检索字符串

Swift UDP连接

但我找不到在Swift实现UDP的好方法。

有人可以教我如何实现UDP客户端并在iPhone上的Swift中发送数据?

对我来说,我使用了它 ,它的用法:

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

经过相当广泛的研究,只提出了对GCD的AsyncSocket的基本指示,并且是一个纯粹的Swift训练的iOS程序员,我寻找了一些原生的Swift套接字支持。

值得庆幸的是,我找到了一个更简单的替代方法,使用Async,称为SwiftSocket。

github( https://github.com/xyyc/SwiftSocket )有大多数套接字的示例,可以通过将几个文件复制到项目中来使用。

对于仅限swift的开发者,我觉得它未得到充分利用,很快就会替换非客观的应用程序的Async。 然后我又对这些东西很陌生,所以我可能会离开:D

这看起来像是对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(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网络编程