我是Swift的新手,对UDP连接有一些疑问。
有人可以提供链接或一些简短的代码,显示我如何将Swift客户端连接到Java服务器?
答案 0 :(得分:3)
您可以使用“Darwin”模块中的相关C函数。有点棘手的部分是从sockaddr_xyz结构到通用sockaddr的转换(也许有人有比我更好的解决方案......)。否则它很直接。
更新了Swift 0.2 aka Xcode 6.3.1(strlen()必须转换为Int)。
样品:
let textToSend = "Hello World!"
func htons(value: CUnsignedShort) -> CUnsignedShort {
return (value << 8) + (value >> 8);
}
let INADDR_ANY = in_addr(s_addr: 0)
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(1337),
sin_addr: INADDR_ANY,
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, Int(strlen(cstr)), 0,
addrptr, socklen_t(addr.sin_len))
}
}
答案 1 :(得分:1)
经过相当广泛的研究,只提出了对GCD的AsyncSocket的基本指示,并且是一个纯粹的Swift训练的iOS程序员,我寻找了一些原生的Swift套接字支持。
值得庆幸的是,我找到了一个更简单的替代方法来使用Async,称为SwiftSocket。
github(https://github.com/xyyc/SwiftSocket)包含大多数套接字的示例,可以通过将几个文件复制到项目中来使用。
对于仅限swift的开发者,我觉得它未得到充分利用,很快就会替换非客观的应用程序的Async。然后我又对这些东西很陌生,所以我可能会离开:D