我最近開始學習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. 不允許在Android套接字應用程序中使用3g
- 5. 在Swift中保持套接字在聊天應用程序中打開
- 6. 在iPhone應用程序中使用SwiftyDropbox
- 7. iPhone應用程序的套接字超時值
- 8. Python 3套接字應用程序停止發送數據
- 9. Swift 3 Singleton Manager套接字連接
- 10. 在套接字程序中調用API?
- 11. 在swift iOS應用程序中將參數發送到套接字
- 12. 在Swift中使用Stream打開套接字連接到SMTP服務器3
- 13. 套接字和JSP應用程序
- 14. 靈活的套接字應用程序
- 15. Java套接字聊天應用程序
- 16. 我的Java套接字應用程序
- 17. Android應用程序和套接字
- 18. 使用套接字從C#應用程序的LUA應用程序
- 19. 在iPhone應用程序中使用NSException
- 20. 在iPhone應用程序中使用SDL
- 21. 在iPhone應用程序中使用SIP
- 22. 在iPhone應用程序中使用JSON
- 23. 在iPhone應用程序中使用mapkit
- 24. 在IPHONE應用程序中使用.net?
- 25. 在iPhone應用程序中使用Localizable.strings
- 26. 應用程序崩潰在iPhone應用程序中使用NSPredicate?
- 27. 如何在django應用程序中編寫套接字編程
- 28. swift 3 tableview.reloadData崩潰應用程序
- 29. 不能在iPhone應用程序中使用自定義字體
- 30. 如何在android中使用套接字編程創建聊天應用程序?
你解決了你的問題嗎? –