![](/img/trans.png)
[英]Socket.IO-Client-Swift does not connect to nodejs socket.io server
[英]Receiving SSL error when trying to connect swift client to socket.io server
我正在 Node.js 中設置 Socket.io 服務器,在 Swift 中設置客戶端來實現實時聊天應用程序。
在服務器端,代碼如下:
const express = require('express');
const app = express();
const port = process.env.PORT || 8080;
const server = app.listen(port, () => {
console.log(`A Node Js API is listening on port: ${port}`);
});
const io = require("socket.io")(server, {
rejectUnauthorized: false
});
//set socket.io listeners
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on("connect_error", (err) => {
console.log(`connect_error due to ${err.message}`);
});
});
在客戶端,代碼如下:
import SocketIO
class SocketIOManager: NSObject {
static let sharedInstance = SocketIOManager()
static let manager = SocketManager(socketURL: URL(string: "https://localhost:8080")!, config: [.log(true), .compress])
let socket = manager.defaultSocket
func establishConnection() {
socket.on("test") { dataArray, ack in
print(dataArray)
}
socket.connect()
}
func closeConnection() {
socket.disconnect()
}
}
我在 applicationDidBecomeActive() 方法中調用 AppDelegate 中的建立連接()。 當調用建立連接()時,我收到以下 SSL 錯誤:
LOG SocketManager: Trying to reconnect
LOG SocketIOClient{/}: Handling event: reconnectAttempt with data: [-2]
LOG SocketManager: Scheduling reconnect in 25.7991450561197s
LOG SocketEngine: Starting engine. Server: https://localhost:8080
LOG SocketEngine: Handshaking
LOG SocketEnginePolling: Doing polling GET https://localhost:8080/socket.io/?transport=polling&b64=1
...
finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made."
UserInfo={NSErrorFailingURLStringKey=https://localhost:8080/socket.io/?transport=polling&b64=1, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3,
_NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <A81C6803-9CF8-4930-A6C8-0C633C165D25>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey
我已嘗試編輯 Info.plist 以更改應用程序傳輸安全設置,但我仍然收到錯誤消息。 可能出了什么問題?
對於任何為這個問題而苦惱的人,這里有一個可行的解決方案。 您應該使用.secure(true), .selfSigned(true)
選項和URLAuthenticationChallenge
。
class ServerLiveDataSocket : NSObject
{
static let shared = ServerLiveDataSocket()
var manager : SocketManager!
var socket : SocketIOClient!
func initSocketService(symbols : [String], dataPovider : DataProvider)
{
manager = SocketManager(socketURL: URL(string: "YOUR_HTTPS_URL_ADDRESS")!, config: [.log(true),
.compress, .secure(true), .selfSigned(true), .sessionDelegate(self)])
socket = manager.defaultSocket
socket.on("users", callback: { data,ack in
print(data)
})
socket.on(clientEvent: .connect) { data, ack in
self.socket.emit("userNew", userData)
}
socket.connect()
}
}
extension ServerLiveDataSocket : URLSessionDelegate
{
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.