aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/websockets_api
diff options
context:
space:
mode:
authorFlorian Merz <me@fiji-flo.de>2021-02-11 12:56:40 +0100
committerFlorian Merz <me@fiji-flo.de>2021-02-11 12:56:40 +0100
commit310fd066e91f454b990372ffa30e803cc8120975 (patch)
treed5d900deb656a5da18e0b60d00f0db73f3a2e88e /files/zh-cn/web/api/websockets_api
parent8260a606c143e6b55a467edf017a56bdcd6cba7e (diff)
downloadtranslated-content-310fd066e91f454b990372ffa30e803cc8120975.tar.gz
translated-content-310fd066e91f454b990372ffa30e803cc8120975.tar.bz2
translated-content-310fd066e91f454b990372ffa30e803cc8120975.zip
unslug zh-cn: move
Diffstat (limited to 'files/zh-cn/web/api/websockets_api')
-rw-r--r--files/zh-cn/web/api/websockets_api/websocket_server_vb.net/index.html270
1 files changed, 0 insertions, 270 deletions
diff --git a/files/zh-cn/web/api/websockets_api/websocket_server_vb.net/index.html b/files/zh-cn/web/api/websockets_api/websocket_server_vb.net/index.html
deleted file mode 100644
index 3969f9c5ea..0000000000
--- a/files/zh-cn/web/api/websockets_api/websocket_server_vb.net/index.html
+++ /dev/null
@@ -1,270 +0,0 @@
----
-title: WebSocket Server Vb.NET
-slug: Web/API/WebSockets_API/WebSocket_Server_Vb.NET
-translation_of: Web/API/WebSockets_API/WebSocket_Server_Vb.NET
----
-<p>{{gecko_minversion_header("2")}}{{draft}}</p>
-
-<p>下面的示例没有优化。没有使用 .NET 4.5 Websocket。<br>
- <br>
- 当前版本:</p>
-
-<ul>
- <li>包含了一个System.Net.Sockets.TcpClient类的泛型集合</li>
- <li>特性 - 自定义事件和委托处理程序</li>
- <li>特性 -  线程化和实现Timers.Timer</li>
- <li>演示如何使用网络流将帧写回客户机(opCode 0001)</li>
- <li>是否打算作为本教程和其他贡献者的起点</li>
-</ul>
-
-<p> </p>
-
-<pre>Imports System.Net.Sockets
-Imports System.Net
-Imports System
-Imports System.Text
-Imports System.Text.RegularExpressions
-
-
-Namespace TypeDef.WebSocket
-
- Public Class Client
- Dim _TcpClient As System.Net.Sockets.TcpClient
-
- Public Delegate Sub OnClientDisconnectDelegateHandler()
- Public Event onClientDisconnect As OnClientDisconnectDelegateHandler
-
-
- Sub New(ByVal tcpClient As System.Net.Sockets.TcpClient)
- Me._TcpClient = tcpClient
- End Sub
-
-
- Function isConnected() As Boolean
- Return Me._TcpClient.Connected
- End Function
-
-
- Sub HandShake()
- Dim stream As NetworkStream = Me._TcpClient.GetStream()
- Dim bytes As Byte()
- Dim data As String
-
- While Me._TcpClient.Connected
- While (stream.DataAvailable)
- ReDim bytes(Me._TcpClient.Client.Available)
- stream.Read(bytes, 0, bytes.Length)
- data = System.Text.Encoding.UTF8.GetString(bytes)
-
- If (New System.Text.RegularExpressions.Regex("^GET").IsMatch(data)) Then
-
- Dim response As Byte() = System.Text.Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" &amp; Environment.NewLine &amp; "Connection: Upgrade" &amp; Environment.NewLine &amp; "Upgrade: websocket" &amp; Environment.NewLine &amp; "Sec-WebSocket-Accept: " &amp; Convert.ToBase64String(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(New Regex("Sec-WebSocket-Key: (.*)").Match(data).Groups(1).Value.Trim() &amp; "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))) &amp; Environment.NewLine &amp; Environment.NewLine)
-
- stream.Write(response, 0, response.Length)
- Exit Sub
- Else
- 'We're going to disconnect the client here, because he's not handshacking properly (or at least to the scope of this code sample)
- Me._TcpClient.Close() 'The next While Me._TcpClient.Connected Loop Check should fail.. and raise the onClientDisconnect Event Thereafter
- End If
- End While
- End While
- RaiseEvent onClientDisconnect()
- End Sub
-
-
- Sub CheckForDataAvailability()
- If (Me._TcpClient.GetStream().DataAvailable) Then
- Dim stream As NetworkStream = Me._TcpClient.GetStream()
-  Dim frameCount = 2
- Dim bytes As Byte()
- Dim data As String
- ReDim bytes(Me._TcpClient.Client.Available)
- stream.Read(bytes, 0, bytes.Length) 'Read the stream, don't close it..
-
- Try
- Dim length As UInteger = bytes(1) - 128 'this should obviously be a byte (unsigned 8bit value)
-
-  If length &gt; -1 Then
- If length = 126 Then
- length = 4
- ElseIf length = 127 Then
- length = 10
- End If
- End If
-
- 'the following is very inefficient and likely unnecessary..
- 'the main purpose is to just get the lower 4 bits of byte(0) - which is the OPCODE
-
- Dim value As Integer = bytes(0)
- Dim bitArray As BitArray = New BitArray(8)
-
- For c As Integer = 0 To 7 Step 1
- If value - (2 ^ (7 - c)) &gt;= 0 Then
- bitArray.Item(c) = True
- value -= (2 ^ (7 - c))
- Else
- bitArray.Item(c) = False
- End If
- Next
-
-
- Dim FRRR_OPCODE As String = ""
-
- For Each bit As Boolean In bitArray
- If bit Then
- FRRR_OPCODE &amp;= "1"
- Else
- FRRR_OPCODE &amp;= "0"
- End If
- Next
-
-
- Dim FIN As Integer = FRRR_OPCODE.Substring(0, 1)
- Dim RSV1 As Integer = FRRR_OPCODE.Substring(1, 1)
- Dim RSV2 As Integer = FRRR_OPCODE.Substring(2, 1)
- Dim RSV3 As Integer = FRRR_OPCODE.Substring(3, 1)
- Dim opCode As Integer = Convert.ToInt32(FRRR_OPCODE.Substring(4, 4), 2)
-
-
-
- Dim decoded(bytes.Length - (frameCount + 4)) As Byte
- Dim key As Byte() = {bytes(frameCount), bytes(frameCount+1), bytes(frameCount+2), bytes(frameCount+3)}
-
- Dim j As Integer = 0
-  For i As Integer = (frameCount + 4) To (bytes.Length - 2) Step 1
- decoded(j) = Convert.ToByte((bytes(i) Xor masks(j Mod 4)))
-  j += 1
- Next
-
-
-
- Select Case opCode
- Case Is = 1
- 'Text Data Sent From Client
-
- data = System.Text.Encoding.UTF8.GetString(decoded)
- 'handle this data
-
- Dim Payload As Byte() = System.Text.Encoding.UTF8.GetBytes("Text Recieved")
- Dim FRRROPCODE As Byte() = Convert.ToByte("10000001", 2) 'FIN is set, and OPCODE is 1 or Text
- Dim header as byte() = {FRRROPCODE, Convert.ToByte(Payload.Length)}
-
-
- Dim ResponseData As Byte()
- ReDim ResponseData((header.length + Payload.Length) - 1)
- 'NOTEWORTHY: if you Redim ResponseData(header.length + Payload.Length).. you'll add a 0 value byte at the end of the response data..
- 'which tells the client that your next stream write will be a continuation frame..
-
- Dim index as integer = 0
-
- Buffer.BlockCopy(header, 0, ResponseData, index, header.length)
- index += header.length
-
- Buffer.BlockCopy(payload, 0, ResponseData, index, payload.length)
- index += payload.length
- stream.Write(ResponseData, 0, ResponseData.Length)
- Case Is = 2
- '// Binary Data Sent From Client
- data = System.Text.Encoding.UTF8.GetString(decoded)
- Dim response As Byte() = System.Text.Encoding.UTF8.GetBytes("Binary Recieved")
- stream.Write(response, 0, response.Length)
- Case Is = 9 '// Ping Sent From Client
- Case Is = 10 '// Pong Sent From Client
- Case Else '// Improper opCode.. disconnect the client
- _TcpClient.Close()
- RaiseEvent onClientDisconnect()
- End Select
- Catch ex As Exception
- _TcpClient.Close()
- RaiseEvent onClientDisconnect()
- End Try
- End If
- End Sub
- End Class
-
-
-
- Public Class Server
- Inherits System.Net.Sockets.TcpListener
-
- Delegate Sub OnClientConnectDelegate(ByVal sender As Object, ByRef Client As WebSocket.Client)
- Event OnClientConnect As OnClientConnectDelegate
-
-
- Dim WithEvents PendingCheckTimer As Timers.Timer = New Timers.Timer(500)
- Dim WithEvents ClientDataAvailableTimer As Timers.Timer = New Timers.Timer(50)
- Property ClientCollection As List(Of WebSocket.Client) = New List(Of WebSocket.Client)
-
-
-
- Sub New(ByVal url As String, ByVal port As Integer)
- MyBase.New(IPAddress.Parse(url), port)
- End Sub
-
-
- Sub startServer()
- Me.Start()
- PendingCheckTimer.Start()
- End Sub
-
-
-
- Sub Client_Connected(ByVal sender As Object, ByRef client As WebSocket.Client) Handles Me.OnClientConnect
- Me.ClientCollection.Add(client)
- AddHandler client.onClientDisconnect, AddressOf Client_Disconnected
- client.HandShake()
- ClientDataAvailableTimer.Start()
- End Sub
-
-
- Sub Client_Disconnected()
-
- End Sub
-
-
- Function isClientDisconnected(ByVal client As WebSocket.Client) As Boolean
- isClientDisconnected = False
- If Not client.isConnected Then
- Return True
- End If
- End Function
-
-
- Function isClientConnected(ByVal client As WebSocket.Client) As Boolean
- isClientConnected = False
- If client.isConnected Then
- Return True
- End If
- End Function
-
-
- Private Sub PendingCheckTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles PendingCheckTimer.Elapsed
- If Pending() Then
- RaiseEvent OnClientConnect(Me, New CORE.TypeDef.WebSocket.Client(Me.AcceptTcpClient()))
- End If
- End Sub
-
-
- Private Sub ClientDataAvailableTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles ClientDataAvailableTimer.Elapsed
- Me.ClientCollection.RemoveAll(AddressOf isClientDisconnected)
- If Me.ClientCollection.Count &lt; 1 Then ClientDataAvailableTimer.Stop()
-
- For Each Client As WebSocket.Client In Me.ClientCollection
- Client.CheckForDataAvailability()
- Next
- End Sub
- End Class
-End Namespace
-
-Sub Main() 'Program Entry point
- Dim thread As System.Threading.Thread = New System.Threading.Thread(AddressOf StartWebSocketServer)
- 'Application.Add("WebSocketServerThread", thread) 'Global.asax - context.Application .. I left this part in for web application developers
- thread.Start()
-End Sub
-
-Public Shared WebSocketServer As TypeDef.WebSocket.Server
-Public Shared Sub StartWebSocketServer()
- WebSocketServer = New TypeDef.WebSocket.Server("127.0.0.1", 8000)
- WebSocketServer.startServer()
-End Sub
-</pre>