1. 程式人生 > >網頁websocket正常和C#websocket-csharp 斷開連線問題

網頁websocket正常和C#websocket-csharp 斷開連線問題

最近在做一個pc端的 websocket客戶端。從網上找了 websocket-csharp 這個包。

一切正常。。。

可是後來發現websocket 在沒有資料推送的情況下過一段時間,會沒有資料推送。

但我的websocket 有重連機制。就是在OnClose 事件裡重新連線websocket。

後來經過測試發現 ,客戶端websocket 沒有收到 close frame,所以沒有觸發 onclose 事件。

可是 在網頁端的 websocket 測試正常,1小時後斷開,觸發onclose 事件 ,重連。。。

我下載了 wireshark。進行 抓包。

發現 網頁端的websocket 在沒有資料推送的情況下,還會不斷的傳送 和接受tcp 資料


而pc端的websocket 沒有。

後來研究了tcp 協議 。原來網頁端的 tcp 打開了keep-alive 模式。它會不斷的向服務端傳送請求,來保持連線。

而pc端的沒有。

到此 ,我把pc端 websocket 中 建立tcpclient 的地方加了:_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, inArray, null);

使pc端 tcp 也開啟了keep-alive模式;

結果和網頁端一樣了。

總結,網頁端的websocket 建立的tcp 為keep-alive的,而websocket-csharp 卻沒有所以要手動的呼叫此包裡提供的ping函式,來保持與服務端的連線。。。

相關推薦

網頁websocket正常C#websocket-csharp 斷開連線問題

最近在做一個pc端的 websocket客戶端。從網上找了 websocket-csharp 這個包。 一切正常。。。 可是後來發現websocket 在沒有資料推送的情況下過一段時間,會沒有資料推送。 但我的websocket 有重連機制。就是在OnClose 事件裡重新

websocket加入心跳包防止自動斷開連線

var userId=$("#userId").val(); var lockReconnect = false; //避免ws重複連線 var ws = null; // 判斷當前瀏覽器是否支援WebSocket var wsUrl = serverConfig.c

Wireshark抓包示範:TCP三次握手建立連線四次握手斷開連線

以下內容來自網路資源整合,僅供自己記錄,日後檢視方便。 首先介紹Wireshark抓包工具,它長這樣: 下面我們要設定過濾規則: 按如下設定,主要設定: 1、需要監控的網絡卡; 2、過濾規則(圖示是“HTTP TCP port(80)”,即只監控TCP連線):

tcp三次握手建立連線4次揮手斷開連線

[LAST_ACK -> CLOSED] 伺服器收到了對FIN的ACK, 徹底關閉連線. 客戶端狀態改變: 1.[CLOSED -> SYN_SENT] 客戶端呼叫connect, 傳送同步報文段; 2.[SYN_SENT -> ESTABLISHED] connect呼叫成功, 則進入ES

nginx配置支持httpswss(websocket)協議

cat 監聽 list protoc protocol clas conn ati www. server { listen 80; listen 443 ssl http2; server_name lyz810.com;

初探實現websocket心跳重連

需要 方法 0ms 實例化 並且 rtb code 控制 判斷 初探和實現websocket心跳重連 心跳重連緣由 在使用websocket過程中,可能會出現網絡斷開的情況,比如信號不好,或者網絡臨時性關閉,這時候websocket的連接已經斷開, 而瀏覽器不會執行webs

Nginx(6) nginx反向代理配置websocket,以及配置後websocket連線後立即斷開的解決方法

用 proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade"; 配置nginx使之支援websockt的反響代理後,發現websockt連線上就立即斷開了 最後查到原因是proxy_rea

C# WebSocket模擬傳送接收

WebSocket服務端 C#示例程式碼 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Ne

spring-boot websocket 配置實現(包括html)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>My WebSocket</title> <script src="js/vue.js"><

微信小程式 實現websocket連線 以及斷開連線之後自動重連

app.js let socketMsgQueue = [] let isLoading = false App({ globalData: { userInfo: null, localSocket: {}, callback: function () {} },

C++ websocket庫 websocketpp/websocket++例子編譯試用

想試試C++的websocket,搜了下,發現websocketpp/websocket++用的人挺多,對主流瀏覽器都支援; 使用也方便,包含標頭檔案即可(再加上boost標頭檔案和庫),沒有其他依賴 1、搭建好boost http://blog.csdn.net/s

WebSocket介紹Socket的區別

   WebSocket介紹與原理 WebSocket protocol 是HTML5一種新的協議。它實現了瀏覽器與伺服器全雙工通訊(full-duplex)。一開始的握手需要藉助HTTP請求完成。 ——百度百科 目的:即時通訊,替代輪詢 網站上的即時通訊是很常見

websocket自動斷開連線問題

問題:每過5分鐘左右,websocket就會自動關閉 原因:使用了nginx服務,nginx配置: proxy_read_timeout(Default: 60s;),如果一直沒有資料傳輸,連線會在過

WebSocket(伍) 斷開連線

WebSocket是很民主的,啥都要協商!建立連線時需要握手協議,連斷開連線都需要雙方共同完成!其實斷開連線直接斷開TCP連線就可以了,但是這有點暴力。文明點的方法是發個請求,讓對方自己斷開。客戶端要主動斷開就必須向伺服器傳送8這個操作碼。   首先是伺服器主導斷開的情

使用RocketMQ Netty WebSocket 搭建一個訊息伺服器 (一)

      專案要做一個訊息伺服器,最近瘋狂百度查詢資料終於搭建完事兒了. 剛開始一臉懵逼,學習了這麼久總算是入門兒因為只是一個訊息伺服器,業務不算太複雜,所以我使用spring boot 來做(省事!)spring boot 的建立在這裡就不發了,我想寫的是搭建的思路,因為

C++微信網頁協議實現應用

微信推送報警訊息實現 目錄 1      前言... 2 1.1     背景... 2 1.2     現有技術對比... 2 2    

Java,泛型類型通配符C#對照

size list ack ace arr 類型通配符 語法 ++ net c#的泛型沒有類型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM並不支持泛型,僅僅是語法糖,在編譯器編譯的時候都轉換成object類型 類型通配符在java中表示的是泛型

A+BC (15)

tro des sta 用例 rfi file tps col fix 時間限制 1000 ms 內存限制 32768 KB 代碼長度限制 100 KB 判斷程序 Standard (來自 小小) 題目描述 給定區間[-2的31次方, 2的31次方]內的3個整數

淺析c++c語言的enum類型

gre gree 但是 最大 src 淺析 end cnblogs () 1.先看c語言枚舉類型 1.c語言定義枚舉類型,每一個枚舉元素都是一個整數2.註重數據類型,沒有數據類型限定3.相鄰枚舉元素相差整數4.可以通過整數訪問,不夠安全 2.上代碼: 1 #includ

CC++頭文件大全

文件 關於 limit stack 運算符 動態 數學函數 limits pan C、傳統 C++ #include <assert.h>    //設定插入點#include <ctype.h>     //字符處理#include <er