gpt4 book ai didi

ios - Swift Socket,监听传入的消息

转载 作者:行者123 更新时间:2023-11-28 07:55:45 29 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现 swift 套接字。我对套接字编程还很陌生。我能够通过套接字发送消息。但是我无法收听来自服务器的任何消息。我已经实现了以下代码:

    let host = Urls.GetServerIP()
let port = portNo
client = TCPClient(address: host, port: Int32(port))

switch client?.connect(timeout: 10) {
case .success?:
print((readResponse(from: client!)))
case .failure(let error)?:
print( String(describing: error))
break

case .none: break

}

在上面的代码中,我能够读取连接后立即收到的传入消息。但是,几分钟后,我无法找到一种方法来知道服务器有消息。

是否有任何特定的回调来了解新消息何时从服务器到达?

我已经为我的类(class)实现了 StreamDelegate。但是没有回调被触发。

谢谢

最佳答案

看来你的代码缺乏连续阅读,这就是你只收到一次消息的原因。前段时间我自己也用过 SwiftSocket。这个框架的问题是它太简单并且缺少很多功能,例如加密。

我切换到CocoaAsyncSocket ,这是在 Swift 中处理套接字连接的瑞士军刀。

这是一个简短的例子:

import CocoaAsyncSocket

class TcpSocketConnection: GCDAsyncSocketDelegate {

let tcpSocket: GCDAsyncSocket?

init(host: String, port: UInt16) {
self.tcpSocket = GCDAsyncSocket(delegate: self)
do {
try tcpSocket?.connect(toHost: host, onPort: port, withTimeout: 5.0)
} catch let error {
print("Cannot open socket to \(host):\(port): \(error)")
self.tcpSocket = nil
}
}

func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
self.tcpSocket?.readData(toLength: 1024, withTimeout: 60.0)
}

func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
// Process data
self.tcpSocket?.readData(toLength: 1024, withTimeout: 60.0, tag: 0)
}

}

代码在很大程度上取决于您的服务器的行为方式以及您到底想做什么。套接字处理不是一件容易的事,尤其是当您添加加密时(您应该在现代应用程序中这样做)。您可以使用 documentation作为起点,但您必须阅读和学习很多东西。

关于ios - Swift Socket,监听传入的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48108575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com