c# - Websocket help! -
i'm working on websocket application. have server written in c#. have tested using c# application sending , receiving data. problem occurs when use javascript on chrome developer tool (console) , use websockets connect server.
i receive header string websocket script, 2 keys , last 8 characters hashing.
i used header string keys generate hash code , crate header send chrome(j script on developer tool).
issues:-
the onopen event never triggered , websocket not receive header(i assume). use onerror capture errors. never occur.
the readystate on websocket 0 or 2(always).
- but when send disconnect response server, websocket triggers onclose method. (so assume open not ready communicate)
any suggestions??????? here's javascript if helps.
websocket = new websocket('ws://my server ip here:8080'); try { websocket.onopen = function(evt) { open(evt) //websocket.send("message send"); alert("message sent..."); } } catch(err) { debug(err,'error') } websocket.onerror = function(evt) { error(evt) } websocket.onclose = function(evt) { close(evt) } websocket.onmessage = function(evt) { message(evt) } function open(evt) { alert("connected"); dosend("websocket rocks"); } function error(evt) { alert (evt.data) } function close(evt) { alert("disconnected"); } function message(evt) { alert(evt.data); } function dosend(message) { alert(message); websocket.send(message); }
and header sent
http/1.1 101 websocket protocol handshake
upgrade: websocket
connection: upgrade
sec-websocket-origin: chrome://newtab
sec-websocket-location: ws://my server ip:8080 ??i???m?!??9?
thanks everyone.
it looks you're trying respond handshake request without appropriate challenge response. robin mentioned, handshake more complex , involves challenge newer versions of websocket protocol. this article explains version 76 handshake in more detail.
here's code sample detects websocket protocol version , replies appropriate response. (it's in java, ymmv, should point in right direction.)
// create websocket handshake response. httpresponse res = new defaulthttpresponse(http_1_1, new httpresponsestatus(101, "web socket protocol handshake")); res.addheader(names.upgrade, websocket); res.addheader(connection, values.upgrade); // fill in headers , contents depending on handshake method. // new handshake specification has challenge. if (req.containsheader(sec_websocket_key1) && req.containsheader(sec_websocket_key2)) { // new handshake method challenge res.addheader(sec_websocket_origin, req.getheader(origin)); res.addheader(sec_websocket_location, getwebsocketlocation(req)); string protocol = req.getheader(sec_websocket_protocol); if (protocol != null) { res.addheader(sec_websocket_protocol, protocol); } // calculate answer of challenge. string key1 = req.getheader(sec_websocket_key1); string key2 = req.getheader(sec_websocket_key2); int = (int) (long.parselong(key1.replaceall("[^0-9]", "")) / key1 .replaceall("[^ ]", "").length()); int b = (int) (long.parselong(key2.replaceall("[^0-9]", "")) / key2 .replaceall("[^ ]", "").length()); long c = req.getcontent().readlong(); channelbuffer input = channelbuffers.buffer(16); input.writeint(a); input.writeint(b); input.writelong(c); channelbuffer output = channelbuffers .wrappedbuffer(messagedigest.getinstance("md5").digest( input.array())); res.setcontent(output); } else { // old handshake method no challenge: res.addheader(websocket_origin, req.getheader(origin)); res.addheader(websocket_location, getwebsocketlocation(req)); string protocol = req.getheader(websocket_protocol); if (protocol != null) { res.addheader(websocket_protocol, protocol); } } // send response...
Comments
Post a Comment