Forum

Websocket Bağlantıs...
 
Bildirimler
Hepsini Temizle

Websocket Bağlantısı

4 Yazılar
2 Üyeler
0 Reactions
4,847 Görüntüleme
(@EmreKARLI)
Gönderiler: 2
New Member
Konu başlatıcı
 

Merhabalar..

Sanırım biraz uzun bir soru olacak. Websocket ile visual basic de yazdığım socket üzerinden veri almaya çalışıyorum. Veri sürekli olarak bilindiği üzere tarayıcıya ulaşıyor. Fakat bu sadece opera ve chrome tarayıcılarında çalışıyor. Yani IE ve Firefox sadece başlık ve ilk mesajı alıyor. Takibinde hemen bağlantıyı kapatıyor. İki gündür bununla uğraşıyorum bir çözüm bulamadım. Safari de de denedim. Safari ile hiç bağlantı kuramıyorum yazdığım socket e. Aslında bağlantı kurabiliyorum ama sanırım safari de Websocket-Key farklı işliyor olabilir.. Neyse gelelim soruya.

Acaba yazdığım socket de mi yanlışlık var yoksa javascript de mi bir yanlılık var anlayamadım.
Rica ediyorum çözümünü bilen var ise yardımcı olabilir mi acaba?

 

Visual basic kodlarım:

Sub Main()

        Dim clientListener As New TcpListener(8886)

        clientListener.Start()

        Dim usercount As Integer = 0

        Dim TUDPsocket = New System.Threading.Thread(AddressOf UDPsocket)

        TUDPsocket.IsBackground = True

        TUDPsocket.Start()

        While (True)

            usercount = usercount + 1

            Console.WriteLine("Kullanıcı bekleniyor...")

            Dim mySocket As Socket = clientListener.AcceptSocket()

            Dim evaluator As New Thread(Sub() goodList(mySocket, usercount))

            With evaluator

                .IsBackground = True

                .Start()

            End With

        End While

        Console.WriteLine("Soket Kapandı!")

        clientListener.Stop()

    End Sub

 

 

Public Sub goodList(ByVal mySocket As Socket, ByVal usercount As Integer)

        Dim recieveBuff(1024) As Byte

        Dim str As String

        Dim UserIP

        Dim ipend As Net.IPEndPoint = mySocket.RemoteEndPoint

        If Not ipend Is Nothing Then

            UserIP = ipend.Address.ToString

        End If

        mySocket.Receive(recieveBuff, recieveBuff.Length, SocketFlags.None)

        str = Encoding.ASCII.GetString(recieveBuff, 0, recieveBuff.Length).Trim(ChrW(0))

        Console.WriteLine("New Connection: " & str)

        Dim getkey1, getkey2, getkey3, newkey, newkey1

        If InStr(str, "Sec-WebSocket-Key: ") > 0 Then

            getkey1 = Split(str, "Sec-WebSocket-Key: ")

            getkey2 = Split(getkey1(1), vbCrLf)

            getkey3 = getkey2(0)

            newkey1 = getkey3 & "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"

            newkey = Convert.ToBase64String(TruncateHash(newkey1))

        Else

            newkey = ""

        End If

        If newkey <> "" Then

            Dim htmlHeader As String = _

                "HTTP/1.1 101 Switching Protocols" & ControlChars.CrLf & _

                "Upgrade: websocket" & ControlChars.CrLf & _

                "Connection: Upgrade" & ControlChars.CrLf & _

                "Access-Control-Allow-Headers: json" & ControlChars.CrLf & _

                "Sec-WebSocket-Accept: " & newkey & ControlChars.CrLf & ControlChars.CrLf

            Dim Bytes() As Byte = Encoding.ASCII.GetBytes(htmlHeader)

            mySocket.Send(Bytes, 0, Bytes.Length, SocketFlags.None)

            Dim MM As String = ""

            Dim EndMM As String = ""

            Dim returnData As String

            While (True)

                returnData = MyValue

                If returnData <> "" Then

                    MM = returnData

                Else

                    MM = ""

                End If

                If MM <> "" And MM <> EndMM Then

                    EndMM = MM

                    sendmessage(mySocket, MM)

                End If

            End While

            mySocket.Close()

            mySocket = Nothing

            Exit Sub

        Else

            mySocket.Close()

            mySocket = Nothing

            Exit Sub

        End If

    End Sub

 

 

 

 Public Sub sendmessage(ByVal mySocket As Socket, ByVal MM As String)

        Dim rawData = Encoding.ASCII.GetBytes(MM)

        Dim frameCount = 0

        Dim frame(10) As Byte

        frame(0) = CByte(129)

        Dim len1 As UInt64 = Len(MM)

        If rawData.Length <= 125 Then

            frame(1) = CByte(rawData.Length)

            frameCount = 2

        ElseIf rawData.LongLength >= 126 AndAlso rawData.LongLength <= 65535 Then

            frame(1) = CByte(126)

            frame(2) = CByte(((len1 >> 8) And CByte(255)))

            frame(3) = CByte((len1 And CByte(255)))

            frameCount = 4

        Else

            frame(1) = CByte(127 + 128)

            frame(2) = CByte(((len1 >> 56) And CByte(255)))

            frame(3) = CByte(((len1 >> 48) And CByte(255)))

            frame(4) = CByte(((len1 >> 40) And CByte(255)))

            frame(5) = CByte(((len1 >> 32) And CByte(255)))

            frame(6) = CByte(((len1 >> 24) And CByte(255)))

            frame(7) = CByte(((len1 >> 16) And CByte(255)))

            frame(8) = CByte(((len1 >> 8) And CByte(255)))

            frame(9) = CByte((len1 And CByte(255)))

            frameCount = 10

        End If

        Dim bLength = frameCount + rawData.Length

        Dim reply(bLength + 1) As Byte

        Dim bLim = 0

        For i = 0 To frameCount - 1

            reply(bLim) = frame(i)

            bLim += 1

        Next

        For i = 0 To rawData.Length - 1

            reply(bLim) = rawData(i)

            bLim += 1

        Next

        Try

            mySocket.Send(reply, 0, reply.Length, SocketFlags.None)

            Console.WriteLine("")

            Console.WriteLine(MM)

            Console.WriteLine("")

        Catch ex As Exception

            Console.WriteLine(ex.Message)

            Debug.Print(ex.Message)

        End Try

    End Sub

 

 

 

Javascript Html Sayfam:

<!DOCTYPE HTML>

<html lang = "en">

<head>

<title>WebSocket Test</title>

  <meta charset = "UTF-8" />

  <style type = "text/css">

  h1 {

    text-align: center;

  }

  .error {

    color: red;

  } 

  .response {

    color: blue;

  }

  fieldset {

    width: 80%;

    margin: auto;

    text-align: center;

    -moz-box-shadow: 10px 10px 10px #000000;

    -webkit-box-shadow: 10px 10px 10px #000000;

  }

  #output {

    font-family: monospace;

    width: 80%;

    margin-left: auto;

    margin-right: auto;

    margin-top: 1em;

    background-color: #eeeeee;

    padding: 1em;

    border: 5px groove #cccccc;

    -moz-border-radius: 15px;

    -webkit-border-radius: 15px;

    -moz-box-shadow: 10px 10px 10px #000000;

    -webkit-box-shadow: 10px 10px 10px #000000;

  } 

  </style>

  <script language="javascript" type="text/javascript">

  var output;

  var websocket;

  function init(){

    output = document.getElementById("output");

  } // end init

  function connect(){

    //open socket

    if ("WebSocket" in window){

      websocket = new WebSocket("ws://localhost:8886");

      output.innerHTML = "connecting..." ;

  

      //attach event handlers

      websocket.onopen = onOpen;

      websocket.onclose = onClose;

      websocket.onmessage = onMessage;

      websocket.onerror = onError;

    } else {

      alert("WebSockets not supported on your browser.");

    } // end if

  } // end connect

  function onOpen(evt){

    //called as soon as a connection is opened

    output.innerHTML = "<p>CONNECTED TO SERVER</p>";

  } // end onOpen

  function onClose(evt){

    //called when connection is severed

    output.innerHTML += "<p>DISCONNECTED</p>";

  } // end onClose;

  function onMessage(evt){

    //called on receipt of message

    output.innerHTML += "<p class = 'response'>RESPONSE: " 

      + evt.data + "</p>";

  } // end onMessage

  function onError(evt){

    //called on error

    output.innerHTML += "<p class = 'error'>ERROR: " 

      + evt.data + "</p>";

  } // end onError

  function sendMessage(){

    //get message from text field

    txtMessage = document.getElementById("txtMessage");

    message = txtMessage.value;

    //pass message to server

    websocket.send(message);

    output.innerHTML += "<p>MESSAGE SENT: " + message + "</p>";

  } // end sendMessage

  

  </script>

</head>

<body onload = "init()">

  <h1>Web Socket Echo Chamber</h1>

  <form action = "">

    <fieldset>

      <button type = "button"

              onclick = "connect()">

        connect to server

      </button>

      <label for = "txtMessage">

        <input type = "text"

               id = "txtMessage"

               value = "HTML5 Quick Reference For Dummies" />

      </label>

      <button type = "button"

              onclick = "sendMessage()">

        send message

      </button>

      <button type = "button"

              onclick = "websocket.close()">

        disconnect

      </button>

    </fieldset>

  </form>

  <div id="output">Click 'connect' button to connect</div>

</body>

</html>

 
Gönderildi : 05/05/2015 15:24

(@eravse)
Gönderiler: 1753
Üye
 

Çok yanlış bişey gözükmuyor ama debuggerda hatalara yada infolara bakmak lazım.

Bu arada neden WebSocket ? signalR varken ....

 

Saygılarımla 

 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 06/05/2015 03:38

(@EmreKARLI)
Gönderiler: 2
New Member
Konu başlatıcı
 

SignalR ile ilgili bilgim yok açıkçası. Daha önce yazdığım bir socket i bu şekilde kullanmaya devam etmek istedim. Ama SignalR hakkında kaynak var ise eliniz de kullanmaktan memnun olurum.. 🙂

 
Gönderildi : 06/05/2015 13:04

(@eravse)
Gönderiler: 1753
Üye
 

Merhaba ,

 Kaynak sitede dokumantasyon da iyi http://signalr.net/ youtube de de cok videosu var temiz ve kullanışlı. deneyin derim...

saygılarımla 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 06/05/2015 17:04

Paylaş: