HTML5のWebSocketは、C#でソケット接続を確立します

、WebSocketを

アウトライン

HTML5のWebSocketは、単一のTCP接続を介して全二重通信を開始することによって提供されたプロトコルです。

WebSocketは、サーバーが積極的にクライアントにデータをプッシュすることができ、クライアントとサーバが容易との間でデータのやり取りを可能にします。WebSocket APIでは、ブラウザとサーバーはハンドシェイクを完了する必要があり、あなたは直接2、および双方向のデータ伝送間の永続的な接続を作成することができます。

接続が確立された後、クライアントとサーバが直接TCP接続を介してデータを交換することができ、接続を確立するためのJavaScriptのWebSocketサーバ要求を経由してブラウザに送信されます。あなたがウェブソケット接続を取得するときは、send()メソッドを介してサーバにデータを送信することができ、およびサーバのonMessageイベントによって返されたデータを受信します。

次のWebSocket APIは、オブジェクトを作成するために使用されます。

VaRのソケット= 新規のWebSocket(URL、[プロトコル])。

上記のコードの最初のパラメータのURLは、URLの接続を指定します。第2のパラメータは、任意のプロトコルは、サブプロトコルが許容指定です。

WebSocketのプロパティ

Socket.readyState readyStateの読み取り専用属性は、接続状態を示し、それは次の値を指定できます。

  • 0 - 接続が確立されていないことを示しています。
  • 1--接続が確立されたことを、あなたが通信することができますを示しています。
  • 2 - 閉じた継続的な接続を表します。
  • 3 - 接続が閉じられた、または接続を開くことができないことを示しています。

Socket.bufferedAmount bufferedAmountは、読み取り専用属性が送信されてきた()送信待ちキューに入れられますが、UTF-8のバイト数は、テキストが発行されていません。

WebSocketのイベント


接続がオープンSocket.onopen確立されたときにトリガ
クライアントがメッセージSocket.onmessageサーバデータを受信したときにトリガ
エラーはエラーSocket.onerror通信が発生したときにトリガされ
、接続がクローズSocket.oncloseを閉じたときにトリガ

WebSocketの方法

Socket.send()を使用してデータを送信する
Socket.closeを()接続を閉じ

WebSocketハンドシェイク要求

クライアントの要求

GET / HTTP / 1.1 
のアップグレード:のWebSocket 
接続:アップグレード
ホスト:example.com 
原産地:http://example.com 
秒-のWebSocket-キー:sN9cRrP / n9NdMgdcy2VJFQ == 
秒-のWebSocket-バージョン:13

サーバーの応答

プロトコルの切り替えHTTP / 1.1 101は
アップグレード:のWebSocket 
接続:アップグレード
秒-のWebSocket-受け入れ:fFBooB7FAkLlXgRSz0BT3v4hq5s = 
秒-のWebSocket-場所:WS://example.com/を
  • 接続がアップグレードするように設定する必要があり、それは、クライアントがアップグレードに接続するために望んでいることを意味します。
  • アップグレードのフィールドは、WebSocketのセットのWebSocket契約にアップグレードする願いを表現しなければなりません。
  • SEC-のWebSocketキーはランダムな文字列で、サーバーはメッセージSHA-1のダイジェストを構築するために、これらのデータを使用します。"SEC-のWebSocketキー" プラス特別な文字列 "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"、およびSHA-1ダイジェストをSEC-のWebSocket-受け入れ」として結果をコードする、計算BASE-64が続いています「ヘッダの値がクライアントに返されます。そう、それは通常のHTTPリクエストと間違えないようにすることができることのWebSocketプロトコルです。

WebSocketのポート

TLS上のWebSocketのWSSを表し、HTTPSと同様のWebSocket使用WSのWSSやユニフォームリソース識別子、。以下のような:

WS://example.com/wsapiの
WSS://secure.example.com/

同じTCPとHTTPポートを使用WebSocketを、あなたは、ほとんどのファイアウォールの制限をバイパスすることができます。デフォルトでは、WebSocketのプロトコルはポート80を使用して、デフォルトのポートを使用してオーバーTLS、443で実行します。

クライアントコード

<!HTMLをDOCTYPE> 
<HTML> 
   <HEAD> 
   <METAのcharset = "UTF-8"> 
   <タイトル>初心者チュートリアル(runoob.com)</ TITLE> 
    
      <スクリプトタイプ= "テキスト/ JavaScriptを"> 関数WebSocketTest()
         { IF( "のWebSocket" ウィンドウ)
            { 
               アラート( "!ブラウザでのWebSocketをサポートしています" ); //は、ソケットのWeb開くするvar = WS 新新のWebSocket( "WS:// localhostを:9998 /エコー" ); 
               WS。開く時= 関数()
               { // ウェブソケット接続がデータ送信するためのsend()メソッドを使用して、ある 
                  「データ送信」(ws.sendを
         
            
               
               
               
                
                  ); 
                  アラート( "データ伝送..." ); 
               }; 
                
               ws.onmessage = 関数(EVT)
               { 
                  VAR received_msg = evt.data; 
                  アラート( "データを受信した..." ); 
               }; 
                
               ws.onclose = 機能()
               { 
                  // WebSocketを閉じます 
                  (「接続が閉じられ...」アラート); 
               }; 
            } 
            
            
            { 
               // ブラウザがWebSocketをサポートしていません 
               「!ブラウザでのWebSocketをサポートしていません」の警告を(); 
            } 
         }
       </ SCRIPT> 
        
   </ head> 
   <body> 
   
      <DIV ID = "SSE"> 
         <a href="javascript:WebSocketTest()">运行のWebSocket </a>の
      </ div> 
      
   </ body> 
</ htmlの>

二つは、C#のソケット接続が確立します

1、元のソケットを使用

https://www.cnblogs.com/xqaizx/p/9446863.html

2、サードパーティのライブラリの使用

C#が選択することができますのWebSocket-シャープのWebSocketサーバーを達成します。またはhttps://github.com/Azure/DotNetty

クラスプログラム
    { 
        静的な 無効メイン(文字列[] argsを)
        { 
            VARの WSSV = 新しい WebSocketServer(10086 ); 
            wssv.AddWebSocketService <ScannerHandler>(" /スキャン" ); 
            wssv.Start(); 
            場合(wssv.IsListening)
            { 
                Console.WriteLineを(" ポート{0}でリスニング、およびWebSocketのサービスを提供する:" 、wssv.Port)。
                foreachのVARのパスwssv.WebSocketServices.Paths)
                    Console.WriteLineを(" - {0} " 、パス)。
            } 

            Console.WriteLineを(" \ n押してサーバーを停止するには、Enterキーを... " ); 
            Console.ReadLine(); 

            wssv.Stop(); 
        } 
    } 

    パブリック クラスScannerHandler:WebSocketBehavior 
    { 
        保護 オーバーライド ボイドのonMessage(MessageEventArgs E)
        { 
            場合(e.Data == " スキャン" 
            { 
                ScanResult結果= ScanerHelper.Scan(" D:\\ test.jpg " )。
                もし(result.Success)
                { 
                    Console.WriteLineを(" スキャン成功" )。
                    (送信スキャン成功)。
                } 
                
                { 
                    (送信" スキャンERORを" )。
                } 
            } 
           
        } 
    }

おすすめ

転載: www.cnblogs.com/springsnow/p/11112765.html