1

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

但是,在 iOS 中(我在 2 个模拟器上进行测试 - iOS 12 和 iOS 13.3),我无法连接。我现在正在尝试使用红蜘蛛。(尝试使用 Socket.io 会导致无法解决的问题,而尝试使用 SocketRocket 会导致问题只是让它在 iOS 13.3 上构建。)

我现在面临的问题是,Starscream 在尝试连接到我们的 java 服务器的地址(ws://127.0.0.1:8080/socket)时只是默默地失败了。当我说静默失败时,我的意思是客户端或服务器上没有任何反应表明存在错误,但通过调试我可以看到我们的 iOS 套接字上的 isConnected = false 。

为了尝试解决此问题,我尝试过:

  • 添加App Transport Security Settings -> Allow Arbitrary Loads = YESInfo.plist。
  • 添加NSExceptionDomains -> NSExceptionAllowsInsecureHTTPLoads = YESInfo.plist。
  • 同时使用 localhost 和 127.0.0.1,同时使用/socketor/和 HTTP 而不是 ws/wss。
  • 我什至能够使用原生 Swift 通过 GET 请求有效地查询 google.com。
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))")
        }
    }
}

我对问题可能是什么感到非常迷茫。我究竟做错了什么?

4

0 回答 0