2017-03-03 49 views
1

我正在使用新的套接字API(Chrome.sockets.tcp)執行Chrome應用程序。我已經能夠成功地獲得所有HTTP請求,沒有任何問題。我遇到的問題是使用TLS握手的HTTPS登錄。我們創建了一個Visual Studio C#(RestRequest)應用程序。我們能夠使用HTTPS進行連接。使用Wireshark,我注意到使用TLSv1實現了成功的通信。chrome.sockets.tcp.secure和TLS握手按預期工作不正常

我已經嘗試了各種解決方案,並參考/嘗試了下面的鏈接並試圖想出一個解決方案。

加上許多環節!我已經寫了一堆測試應用程序,但是在最初的握手之後,所有這些應用程序都達到了死衚衕。

以下代碼序列似乎已完成握手,但無法發送登錄帖子。看起來好像握手後套接字混亂了。 (WireShark展示了所有com直到登錄帖子都成功了)。

var that = this; 
chrome.sockets.tcp.create({ 
    persistent: false, 
    name: "hc", 
    bufferSize: 8192 
}, function (createInfo) { 
    console.log("create info = " + JSON.stringify(createInfo)); 
    if (chrome.runtime.lastError) { 
     error('Unable to create socket: ' + chrome.runtime.lastError.message); 
    } 
    that._socketId = createInfo.socketId; 
    chrome.sockets.tcp.setPaused(that._socketId, true, function() { 
     chrome.sockets.tcp.connect(that._socketId, that._httpHost, that._httpPort, function (result) { 
      chrome.sockets.tcp.onReceive.addListener(that._onReceive.bind(this)); 
      chrome.sockets.tcp.onReceiveError.addListener(that._onReceiveError.bind(this)); 
      chrome.sockets.tcp.secure(that._socketId, function (secureResult) { 
       chrome.sockets.tcp.send(that._socketId, str2ab('POST/HTTP/1.1\r\nHOST: ' + that._httpHost + '\r\n\r\n'), function (sendResult) {}); 
      }); 
     }); 
    }); 
}); 

我試過從nmp鍛造實施TLSSocket,並得到了與上例相同的結果。

我們必須爲此應用程序使用TCP,主要用於Chrome應用程序中的Cookie支持。

有沒有人有解決方案或建議?我們在試驗和錯誤方面投入了很多時間,似乎我們已經陷入死衚衕。

+0

使用'.bind()'的目的是什麼? – guest271314

+0

您的代碼中有多個東西在您的代碼之外定義。請在你的問題中包含一個完整的[mcve]。 – Makyen

+0

這個問題與兩天前的[上一個問題](http://stackoverflow.com/q/42520631/3773011)非常相似。如果你不希望這個問題關閉,那麼請編輯這個問題,以包含和解釋兩者之間的區別。通常情況下,您應該編輯較舊的問題以更好地描述問題,而不是發佈一個新問題(假設他們是關於同樣的問題,這是它看起來像我)。 – Makyen

回答

0

您需要在插槽被保護後取消暫停插槽。例如chrome.sockets.tcp.setPaused(that._socketId, false, ...)