SERVER VB.NET
Código
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
Client
Código
function connect(host) { var ws = new WebSocket(host); ws.onopen = function () { console('connected'); //ws.send("test"); }; ws.onmessage = function (evt) { console('reveived data:'+evt.data); }; ws.onclose = function () { console('socket closed'); };
Respuesta para leer mensajes del cliente en el servidor (es lo que no entiendo)
https://stackoverflow.com/questions/24721957/websocket-server-client-server-frame-mask
Gracias de antemano