2015-10-30 18 views
5

Tôi mới nhanh chóng. Tôi muốn làm cho trò chuyện cho iphone vì vậy tôi cần phải sử dụng khách hàng sokect. làm thế nào để làm điều này. cho tôi lời khuyên hoặc ví dụ plz. Tôi cố gắng này https://github.com/socketio/socket.io-client-swift nhưng không kết nối và thử mã nàycách sử dụng ổ cắm nhanh (kết nối, gửi và nhận tin nhắn)

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

sau khi thay đổi mã này:

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 hoặc bên thứ ba API. Yêu thích của tôi là [CocoaAsyncSocket] (https://github.com/robbiehanson/CocoaAsyncSocket), Im cũng làm việc trên một phiên bản nhanh chóng bản thân mình, kiểm tra xem nó ra [Swidis] (https://github.com/FarhadNezhad/Swidis) (Still Beta tho) – Xrait

+0

Hãy thử https://github.com/swiftsocket/SwiftSocket Đây là cách dễ sử dụng. Nếu bạn sẽ thử nó và sẽ không hiểu một số điều, viết bình luận ở đây –

+0

alex_p cảm ơn cho câu trả lời, SwiftSocket kết nối nhưng không thể nhận được dữ liệu. plz cho tôi ví dụ –

Trả lời

5

Tôi sử dụng kết nối SwiftSockethttps://github.com/swiftsocket/SwiftSocket cho kết nối TCP. Nó rất dễ dàng để sử dụng. Ví dụ cho việc sử dụng nó (i thêm ý kiến ​​để nó):

Tôi có wrapper của tôi để làm việc với lib này và đây là phương pháp làm thế nào để gửi yêu cầu và nhận được câu trả lời:

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

tôi kết nối nhưng khi gửi dữ liệu, máy chủ nhận được tin nhắn sau khi dừng mô phỏng. Tại sao lại như vậy ? –

+0

@AvazxonUbaydullayev Bạn có thể chia sẻ liên kết với bạn dự án để xem vấn đề là gì không, bởi vì rất khó để nói điều gì đó mà không cần mã số –

+0

alex_p, hãy tải dự án của tôi liên kết này: https://drive.google.com/open?id= 0B3ShmF_Xwo0_eTNhYV83Y3dhOWs. dự án này đã chia sẻ tất cả mọi người –

0

NSStream hoặc API của bên thứ ba. Yêu thích của tôi là CocoaAsyncSocket, Tôi cũng đang làm việc trên một phiên bản nhanh chóng, hãy kiểm tra xem nó ra Swidis (Vẫn còn Beta)

Ngoài ra, bạn cũng cần phải bao gồm bridge-header.h để sử dụng nhanh.

+0

Chào mừng bạn, tôi hy vọng tôi sẽ bỏ phiếu hoặc kiểm tra :) – Xrait

Các vấn đề liên quan