Forum
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>
Ç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
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.. 🙂
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