简体   繁体   English

Swift UDP连接

[英]Swift UDP Connection

I am new to Swift and have some questions about UDP connections. 我是Swift的新手,对UDP连接有一些疑问。

Could someone provide a link or some short lines of code showing how I can connect a Swift client to a Java server? 有人可以提供一个链接或一些简短的代码,显示我如何将Swift客户端连接到Java服务器?

You can just use the relevant C functions, from the 'Darwin' module. 您可以使用“Darwin”模块中的相关C函数。 The part which is a bit tricky is the casting from sockaddr_xyz structs to the generic sockaddr (maybe someone has a better solution than mine ...). 有点棘手的部分是从sockaddr_xyz结构到通用sockaddr的转换(也许有人有比我更好的解决方案......)。 Otherwise it is pretty straight forward. 否则它非常直接。

Updated for Swift 0.2 aka Xcode 6.3.1 (strlen() must be converted to Int). 更新为Swift 0.2 aka Xcode 6.3.1(strlen()必须转换为Int)。

Sample: 样品:

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

After pretty extensive research coming up with only basic pointers towards GCD's AsyncSocket, and being a pure Swift trained iOS programmer, I looked for something with native Swift socket support. 经过相当广泛的研究,只提出了对GCD的AsyncSocket的基本指示,并且是一个纯粹的Swift训练的iOS程序员,我寻找了一些原生的Swift套接字支持。

Thankfully, I found a much simpler alternative to using Async, called SwiftSocket. 值得庆幸的是,我找到了一个更简单的替代方法来使用Async,称为SwiftSocket。

The github ( https://github.com/xyyc/SwiftSocket ) has examples for most sockets, and is ready to use by copying just a few files into a project. github( https://github.com/xyyc/SwiftSocket )有大多数套接字的例子,可以通过将几个文件复制到项目中来使用。

For swift-only devs, I feel its underutilized and will quickly replace Async for non-objective-c apps. 对于仅限swift的开发人员,我觉得它未得到充分利用,很快就会替换非客观的应用程序的Async。 Then again I'm pretty new to this stuff so I may be way off :D 然后我又对这些东西很陌生,所以我可能会离开:D

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM