- Imports System.Net.Sockets 
- Imports System.Threading 
- Imports System.Net 
-   
- Public Class Form1 
-     Dim serverTcp As TcpListener 
-     Dim serverThread As Thread 
-     Dim host_ As String = "" 
-     Dim curSocket As Socket 
-     Sub Main() 
-         '' Start server 
-         serverThread = New Thread(AddressOf serverProc) 
-         serverThread.Start() 
-     End Sub 
-   
-     Private Sub serverProc() 
-         Try 
-             '' Listen to port 5665 
-             serverTcp = New TcpListener(System.Net.IPAddress.Parse(host_), 5665) 
-             serverTcp.Start() 
-   
-             Console.WriteLine("Listen to port 5665 ...") 
-   
-             '' Accept any connection 
-             While (True) 
-                 curSocket = serverTcp.AcceptSocket() 
-                 Dim thread As New Thread(AddressOf clientProc) 
-                 thread.Start(curSocket) 
-             End While 
-         Catch ex As Exception 
-   
-         End Try 
-   
-     End Sub 
-   
-     Private Sub clientProc(ByVal sck As Socket) 
-         Try 
-             Dim netStream As New NetworkStream(sck) 
-             Dim netReader As New IO.StreamReader(netStream) 
-             Dim netWriter As New IO.StreamWriter(netStream) 
-   
-             Dim key As String = "" 
-   
-             Console.WriteLine("Accept new connection ...") 
-   
-             '' Reading handshake message 
-             While (True) 
-                 Dim line As String = netReader.ReadLine() 
-                 If line.Length = 0 Then 
-                     Exit While 
-                 End If 
-   
-                 If (line.StartsWith("Sec-WebSocket-Key: ")) Then 
-                     key = line.Split(":")(1).Trim() 
-                 End If 
-   
-                 Console.WriteLine("Data: " & line) 
-   
-             End While 
-   
-             '' Calculate accept-key 
-             key += "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" 
-             key = getSHA1Hash(key) 
-   
-             '' Response handshake message 
-             Dim response As String 
-             response = "HTTP/1.1 101 Switching Protocols" & vbCrLf 
-             response &= "Upgrade: websocket" & vbCrLf 
-             response &= "Connection: Upgrade" & vbCrLf 
-             response &= "Sec-WebSocket-Accept: " & key & vbCrLf & vbCrLf 
-             netWriter.Write(response) 
-             netWriter.Flush() 
-   
-             '' Sending message 
-             SendMessage(sck, "SEND.. VB.NET") 
-         Catch ex As Exception 
-   
-         End Try 
-   
-     End Sub 
-     Sub Msg(t As String) 
-         Console.WriteLine(t) 
-     End Sub 
-     Function getSHA1Hash(ByVal strToHash As String) As String 
-         Dim sha1Obj As New System.Security.Cryptography.SHA1CryptoServiceProvider 
-         Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash) 
-         Dim result As String 
-   
-         bytesToHash = sha1Obj.ComputeHash(bytesToHash) 
-         result = Convert.ToBase64String(bytesToHash) 
-   
-         Return result 
-     End Function 
-   
-     Sub SendMessage(sck As Socket, message As String) 
-         Dim rawData = System.Text.Encoding.UTF8.GetBytes(message) 
-   
-         Dim frameCount = 0 
-         Dim frame(10) As Byte 
-   
-         frame(0) = CByte(129) 
-   
-         If rawData.Length <= 125 Then 
-             frame(1) = CByte(rawData.Length) 
-             frameCount = 2 
-         ElseIf rawData.Length >= 126 AndAlso rawData.Length <= 65535 Then 
-             frame(1) = CByte(126) 
-             Dim len = CByte(rawData.Length) 
-             frame(2) = CByte(((len >> 8) & CByte(255))) 
-             frame(3) = CByte((len & CByte(255))) 
-             frameCount = 4 
-         Else 
-             frame(1) = CByte(127) 
-             Dim len = CByte(rawData.Length) 
-             frame(2) = CByte(((len >> 56) & CByte(255))) 
-             frame(3) = CByte(((len >> 48) & CByte(255))) 
-             frame(4) = CByte(((len >> 40) & CByte(255))) 
-             frame(5) = CByte(((len >> 32) & CByte(255))) 
-             frame(6) = CByte(((len >> 24) & CByte(255))) 
-             frame(7) = CByte(((len >> 16) & CByte(255))) 
-             frame(8) = CByte(((len >> 8) & CByte(255))) 
-             frame(9) = CByte((len & CByte(255))) 
-             frameCount = 10 
-         End If 
-   
-         Dim bLength = frameCount + rawData.Length 
-         Console.WriteLine(frameCount) 
-         Console.WriteLine(rawData.Length) 
-         Dim reply(bLength + 1) As Byte 
-   
-         Dim bLim = 0 
-         For i = 0 To frameCount - 1 
-             Console.WriteLine(bLim) 
-             reply(bLim) = frame(i) 
-             bLim += 1 
-         Next 
-   
-         For i = 0 To rawData.Length - 1 
-             Console.WriteLine(bLim) 
-             reply(bLim) = rawData(i) 
-             bLim += 1 
-         Next 
-   
-         sck.Send(reply) 
-     End Sub 
-   
-     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
-         host_ = Dns.GetHostEntry(Dns.GetHostName()).AddressList _ 
-     .Where(Function(a As IPAddress) Not a.IsIPv6LinkLocal AndAlso Not a.IsIPv6Multicast AndAlso Not a.IsIPv6SiteLocal) _ 
-     .Last() _ 
-     .ToString() 
-     End Sub 
-   
-     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
-         Main() 
-     End Sub 
-   
-     Private Sub btnEnviarMensaje_Click(sender As Object, e As EventArgs) Handles btnEnviarMensaje.Click 
-         SendMessage(curSocket, txtMensaje.Text) 
-     End Sub 
-   
- End Class