我最近开始学习Swift 3,我需要以某种方式将它与在Raspberry Pi上运行的Python程序进行交谈。我已经看到了几个像Socket.IO这样的库,可以实现这一点,但我不知道从哪里开始。我如何着手在Swift 3中创建一个套接字。我确实需要双向通信,所以我认为套接字是正确的方法是正确的。在Swift 3 iPhone应用程序中使用套接字
2
A
回答
2
取决于您使用的平台。由于你在iOS上,我建议利用InputStream/OutputStream。父流协议提供了一个接口的插座上创建输入/输出流,它利用CFSockets下方,有一个漂亮的雨燕3.0接口
var inputStream: InputStream?
var outputStream: OutputStream?
Stream.getStreamsToHost(withName: "thing.local", port: 9090, inputStream: &inputStream, outputStream: &outputStream)
万一别人绊倒在琢磨一下插座,如果你/没有/在iOS,macOS等,Swift CoreFoundation仍然不完整,并没有正确实施Stream.getStreamsToHost(或许多其他的东西不幸:/)但是你可以制作posix套接字,因为Swift可以使用C
#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
import Darwin
#elseif os(Linux) || os(FreeBSD) || os(PS4) || os(Android)
import Glibc
#endif
let sock = socket(AF_INET, Int32(SOCK_STREAM.rawValue), 0)
var addr = sockaddr_in(sin_family: sa_family_t(AF_INET),
sin_port: in_port_t(htons(UInt16(port))),
sin_addr: hostAddr,
sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
let addrPtr = withUnsafePointer(to: &addr){ UnsafePointer<sockaddr>(OpaquePointer($0)) }
let connected = connect(sock, addrPtr, UInt32(MemoryLayout<sockaddr_in>.size))
当然,这是所有非常不愉快的阅读,不是非常Swifty,但恐惧不会前往github,并期待ar讨论了大量的Socket实现。所有主要的服务器端快速项目(Perfect,IBM Kitura,Vapor,Zewo,Noze等)都有一些可以使用的简单的套接字和/或SSL套接字实现,或者如果您想要,您可以编写自己的套接字无论如何,C插座就像他们一样。
即使在iOS上,一个有趣的练习是扩展您的GCD知识并使用DispatchSource或DispatchIO编写一个基于GCD的套接字(DispatchSource对于服务器侦听非常有用,IO对于任何通用异步按序IO有用描述符或类似的,而套接字只是一个文件描述符,所以...)
相关问题
- 1. 在Objective-C(iPhone应用程序)中使用CFSocket创建套接字的问题
- 2. 使用Swift的套接字
- 3. iPhone套接字程序
- 4. 在Swift中保持套接字在聊天应用程序中打开
- 5. 在iPhone应用程序中使用SwiftyDropbox
- 6. Python 3套接字应用程序停止发送数据
- 7. iPhone应用程序的套接字超时值
- 8. Swift 3 Singleton Manager套接字连接
- 9. 在swift iOS应用程序中将参数发送到套接字
- 10. 在Swift中使用Stream打开套接字连接到SMTP服务器3
- 11. 套接字和JSP应用程序
- 12. Java套接字聊天应用程序
- 13. 我的Java套接字应用程序
- 14. 使用套接字从C#应用程序的LUA应用程序
- 15. 在iPhone应用程序中使用SIP
- 16. 在iPhone应用程序中使用Localizable.strings
- 17. 在iPhone应用程序中使用JSON
- 18. 在iPhone应用程序中使用mapkit
- 19. 在IPHONE应用程序中使用.net?
- 20. 在iPhone应用程序中使用NSException
- 21. 在iPhone应用程序中使用SDL
- 22. 在php中使用套接字编程(Erlang)的聊天应用程序
- 23. swift 3 tableview.reloadData崩溃应用程序
- 24. 嵌套UIScrollView-iPhone照片应用程序
- 25. 使用套接字推送iOS Web应用程序的通知?
- 26. 使用套接字的Tkinter应用程序开始挂起
- 27. 如何使用套接字启动应用程序Tornado 4.4
- 28. 使用Silverlight应用程序的套接字?
- 29. 如何使用套接字编程将iOS Swift应用程序连接到硬件设备?
- 30. 使用Xcode 4在iPhone 3上运行应用程序
你解决了你的问题吗? –