2015-10-30 28 views
5

私は新しいスイフトです。私はiphoneのためにチャットをしたいので、私はクライアントsokectを使用する必要があります。これを作る方法。私に助言や例を与えるplz。 私はこの https://github.com/socketio/socket.io-client-swift なくは を接続しようと、このコード変更後にこのコードスウィフトでのソケットの使い方(接続、メッセージの送受信)

let client:TCPClient = TCPClient(addr: "89.236.254.27", port: 9000) 
    let (success,errmsg) = client.connect(timeout: 1) 
    if success { 
      let (success,errmsg) = client.send(str:"Hello World!") 
      if success { 
       let data = client.read(1024 * 10) 
       if let d = data { 
        if let str = NSString(bytes: d, length: d.count, encoding: NSUTF8StringEncoding) { 
         print(str) 
        } 
       } 
      } else { 
       print(errmsg) 
      } 
    } else { 
      print(errmsg) 
    } 

試してみました:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let qualityOfServiceClass = QOS_CLASS_BACKGROUND 
    let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0) 
    dispatch_async(backgroundQueue, { 
     let client:TCPClient = TCPClient(addr: "89.236.254.27", port: 9000) 
     var (success, errmsg)=client.connect(timeout: 1) 
     if success { 
      var (isSuccess, errorMessage) = client.send(str: "Hello!") 
      if success { 
       let data = client.read(1024 * 4) 
       if let d = data { 
        if let str = NSString(bytes: d, length: d.count, encoding: NSUTF8StringEncoding) as? String { 
         print(str) 
        } 
       } 
      } else { 
       print(errmsg) 
      } 
     } else { 
      print(errmsg) 
     } 
     dispatch_async(dispatch_get_main_queue(), { 
      () -> Void in 
      print("This is run on the main queue, after the previous code in outer block") 
     }) 
    }) 
} 
+0

NSStreamまたはサードパーティAPIの。私のお気に入りはまだ([CocoaAsyncSocket](https://github.com/robbiehanson/CocoaAsyncSocket)、Imはまた、迅速なバージョン自分自身に取り組んで、それをチェックアウト[Swidis](https://github.com/FarhadNezhad/Swidis)でありますベータ版) – Xrait

+0

これを試してみてください。使いやすいです。あなたがそれを試し、いくつかのことを理解しない場合は、ここにコメントを書く –

+0

alex_pは答え、SwiftSocketが接続されていますが、データを受け取ることができません。 plzは一例に私に –

答えて

5

私はTCP接続用のSwiftSockethttps://github.com/swiftsocket/SwiftSocketを使用しています。それは使いやすいです。例えば、(私はそれにコメントを追加)、それを使用するために:

私はこのLIBとの仕事のための私のラッパーを持っており、これは、要求を送信し、応答を取得する方法の方法です:

private func blockingRequest(data: String, client: TCPClient?) -> (data: String?, error: ConnectionError?) { 
     // It use ufter connection 
     if client != nil { 
      // Send data 
      var (isSuccess, errorMessage) = client!.send(str: data) 
      if isSuccess { 
       // Read response data 
       var data = client!.read(1024*10) 
       if let d = data { 
        // Create String from response data 
        if let str = NSString(bytes: d, length: d.count, encoding: NSUTF8StringEncoding) as? String { 
         return (data: str, error: nil) 
        } else { 
         return (data: nil, error: ConnectionError.BadResponseData) 
        } 
       } else { 
        return (data: nil, error: ConnectionError.BadResponseData) 
       } 
      } else { 
       println(errorMessage) 
       return (data: nil, error: ConnectionError.RequestError) 
      } 
     } else { 
      return (data: nil, error: ConnectionError.RequestError) 
     } 
    } 
+0

私が接続されているが、データを送信する場合、サーバは、シミュレータの停止後にメッセージが表示されました。それはなぜです ? –

+0

@AvazxonUbaydullayev私のプロジェクトは、このリンクを取得するには、コード –

+0

alex_pせずに何かを言うことは非常に困難であるので、あなたがあなたへのリンクを共有することができ、問題が何であるかを確認するためにプロジェクト:https://drive.google.com/open?id= 0B3ShmF_Xwo0_eTNhYV83Y3dhOWs。このプロジェクトは誰もが共有しました –

0

NSStreamまたはサードパーティのAPIを。私のお気に入りは、イムもあなたに迅速に使用するbridge-header.hを含める必要がありますCocoaAsyncSocketに言及することも(まだベータ版)

Swidisを、それをチェックアウトし、迅速なバージョンに自分自身を働いて、CocoaAsyncSocketです。

+0

あなたの歓迎を使用するために自分のコードの例を使って下の解答を作成し、私は投票を取得したり、チェックを願って:) – Xrait