如何将红蜘蛛iOS客户端连接到Java Web服务器

如何将红蜘蛛iOS客户端连接到Java Web服务器,ios,swift,starscream,Ios,Swift,Starscream,我正在使用正确的WebSocketHandler()运行Spring Boot v2.2。我确信服务器是正确的,因为当我转到并尝试连接到服务器时,我们可以验证服务器和浏览器客户端上的连接 但是,在iOS中(我在两个模拟器上测试——iOS 12和iOS 13.3),我无法连接。我现在正试图利用红蜘蛛。(使用Socket.io尝试此操作会导致无法解决的问题,而使用SocketRocket尝试此操作只会导致在iOS 13.3上构建的问题。) 我现在面临的问题是,红蜘蛛在尝试连接到我们的java服务器地

我正在使用正确的WebSocketHandler()运行Spring Boot v2.2。我确信服务器是正确的,因为当我转到并尝试连接到服务器时,我们可以验证服务器和浏览器客户端上的连接

但是,在iOS中(我在两个模拟器上测试——iOS 12和iOS 13.3),我无法连接。我现在正试图利用红蜘蛛。(使用Socket.io尝试此操作会导致无法解决的问题,而使用SocketRocket尝试此操作只会导致在iOS 13.3上构建的问题。)

我现在面临的问题是,红蜘蛛在尝试连接到我们的java服务器地址(ws://127.0.0.1:8080/socket)时,只是默默地失败了。当我说“无提示失败”时,我的意思是客户端或服务器上没有发生任何表示有错误的事情,但通过调试,我可以在iOS套接字上看到isConnected=false

要尝试解决此问题,我已尝试:

  • 在Info.plist中添加
    App传输安全设置->允许任意加载=YES
  • 在Info.plist中添加
    NSExceptionDomains->NSExceptionAllowsInsecureHTTPLoads=YES
  • 使用localhost和127.0.0.1,两者都使用
    /socket
    /
    和HTTP而不是ws/wss
  • 我甚至能够使用本机Swift通过GET请求有效地查询google.com

我很不明白这个问题可能是什么。我做错了什么

我确信服务器是正确的,因为[edit]有令人信服的理由。这个问题与Java、spring boot或websocket无关。我懂Java。我知道websockets。我知道春靴。我不知道红蜘蛛(或者真的知道swift/obj-c)。我帮不了你。完全因此,这些标签对您没有帮助。我不一定要添加obj-c,但这看起来肯定比java、spring boot或websocket更合适。对我来说,它在模拟器上也不起作用,但最终在设备上起作用。我相信服务器是正确的,因为[edit]有令人信服的理由。这个问题与Java、spring boot或websocket无关。我懂Java。我知道websockets。我知道春靴。我不知道红蜘蛛(或者真的知道swift/obj-c)。我帮不了你。完全因此,这些标签对您没有帮助。我不一定要添加obj-c,但这看起来肯定比java、spring boot或websocket更合适。对我来说,它在模拟器上也不起作用,但最终在设备上起作用。
import Foundation
import Starscream

class WinkNetworkClient : WebSocketDelegate {
    private var isConnected : Bool = false

    init() {
        let socket: WebSocket =
            WebSocket(request:
                URLRequest(url: URL(string: "ws://127.0.0.1:8080/socket")!), certPinner: FoundationSecurity(allowSelfSigned: true))
        socket.delegate = self
        socket.connect()
        // socket.write(string: "Hi Server!")
        print("Client done")
    }

    func didReceive(event: WebSocketEvent, client: WebSocket) {
        switch event {
        case .connected(let headers):
            isConnected = true
            print("websocket is connected: \(headers)")
        case .disconnected(let reason, let code):
            isConnected = false
            print("websocket is disconnected: \(reason) with code: \(code)")
        case .text(let string):
            print("Received text: \(string)")
        case .binary(let data):
            print("Received data: \(data.count)")
        case .ping(_):
            break
        case .pong(_):
            break
        case .viabilityChanged(_):
            break
        case .reconnectSuggested(_):
            break
        case .cancelled:
            isConnected = false
        case .error(let error):
            isConnected = false
            print("error connecting to websocket: \(String(describing: error))")
        }
    }
}