2016-11-23 23 views
2

私は最近Swift 3を学び始めました。私は何とかそれをRaspberry Piで動作するPythonプログラムと話す必要があります。私はこれを達成できるSocket.IOのようなライブラリをいくつか見てきましたが、どこから始めるべきかわかりません。 Swift 3でソケットを作成するにはどうしたらいいですか?2ウェイ通信が必要なので、ソケットが正しい方法であると言っても間違いありませんか?Swift 3 iPhoneアプリケーションでソケットを使用

+0

問題を解決しましたか? –

答えて

2

使用しているプラ​​ットフォームによって異なります。あなたはiOS上にいるので、InputStream/OutputStreamを利用することをお勧めします。親ストリームプロトコルは、ソケット上の入力/出力ストリームを作成するためのインタフェースを提供し、あなたがしている場合、それは、下CFSocketsを活用し、ソケットに疑問を抱いにおけるケースの他の誰つまずくで素敵スウィフト3インターフェイス

var inputStream: InputStream? 
var outputStream: OutputStream? 
Stream.getStreamsToHost(withName: "thing.local", port: 9090, inputStream: &inputStream, outputStream: &outputStream) 

を持っています/ iOS、macOSなどではなく、Swift CoreFoundationはまだ不完全で、Stream.getStreamsToHostが正しく実装されていません(残念なことに:/)SwiftはCを使用できるので、posixソケットを作成することができます

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

もちろん、読むのはとても不愉快で、あまり甘いものではありませんが、ギターとアールソケット実装の過多でound。すべての主要なサーバーサイドスウィフトプロジェクト(Perfect、IBM Kitura、Vapor、Zewo、Nozeなど)には、使用できるシンプルなソケットおよび/またはSSLソケットの実装がいくつかあります。とにかく彼らのようなCソケット。

iOSでさえ楽しい演習では、GCDの知識を広げ、DispatchSourceまたはDispatchIOを使ってGCDベースのソケットを作成することになります(DispatchSourceはサーバーのリスニングに役立ちます.IOはファイルへの一般的な非同期インオーダーIOディスクリプタなどであり、ソケットはファイル記述子なので...)

関連する問題