class Program { static void Main( string [] args) { FleckLog.Level = LogLevel.Debug; var allSockets = new List<IWebSocketConnection>(); var server = new WebSocketServer( "ws://0.0.0.0:7181" ); server.Start(socket => { socket.OnOpen = () => { Console.WriteLine( "Open!" ); allSockets.Add(socket); }; socket.OnClose = () => { Console.WriteLine( "Close!" ); allSockets.Remove(socket); }; socket.OnMessage = message => { Console.WriteLine(message); allSockets.ToList().ForEach(s => s.Send( "Echo: " + message)); }; socket.OnBinary = file => { string path = ( "D:/test.txt" ); //创建一个文件流 FileStream fs = new FileStream(path, FileMode.Create); //将byte数组写入文件中 fs.Write(file, 0, file.Length); //所有流类型都要关闭流,否则会出现内存泄露问题 fs.Close(); }; }); var input = Console.ReadLine(); while (input != "exit" ) { foreach ( var socket in allSockets.ToList()) { socket.Send(input); } input = Console.ReadLine(); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> < html > < head > < title >websocket client</ title > < script type="text/javascript"> var start = function () { var inc = document.getElementById('incomming'); var wsImpl = window.WebSocket || window.MozWebSocket; var form = document.getElementById('sendForm'); var input = document.getElementById('sendText'); inc.innerHTML += "connecting to server ..< br />"; // create a new websocket and connect window.ws = new wsImpl('ws://localhost:7181/'); // when data is comming from the server, this metod is called ws.onmessage = function (evt) { inc.innerHTML += evt.data + '< br />'; }; // when the connection is established, this method is called ws.onopen = function () { inc.innerHTML += '.. connection open< br />'; }; // when the connection is closed, this method is called ws.onclose = function () { inc.innerHTML += '.. connection closed< br />'; } form.addEventListener('submit', function (e) { e.preventDefault(); var val = input.value; ws.send(val); input.value = ""; }); } window.onload = start; </ script > </ head > < body > < form id="sendForm"> < input id="sendText" placeholder="Text to send" /> </ form > < pre id="incomming"></ pre > </ body > </ html > |
//实现聊天窗口与文件发送
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | <! DOCTYPE html> < html > < head > < title >WebSocket Chat Client</ title > < meta charset="utf-8" /> < script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></ script > < script type="text/javascript" > //判读浏览器是否支持websocket $().ready(function() { if ( !window.WebSocket ) { alert("童鞋, 你的浏览器不支持该功能啊"); } }); //在消息框中打印内容 function log(text) { $("#log").append(text+"\n"); } //全局的websocket变量 var ws; //创建连接 $(function() { $("#uriForm").submit(function() { log("准备连接到" + $("#uri").val()); ws = new WebSocket($("#uri").val()); //连接成功建立后响应 ws.onopen = function() { log("成功连接到" + $("#uri").val()); } //收到服务器消息后响应 ws.onmessage = function(e) { log("收到服务器消息:" + e.data + "'\n"); } //连接关闭后响应 ws.onclose = function() { log("关闭连接"); $("#disconnect").attr({"disabled":"disabled"}); $("#uri").removeAttr("disabled"); $("#connect").removeAttr("disabled"); ws = null; } $("#uri").attr({"disabled":"disabled"}); $("#connect").attr({"disabled":"disabled"}); $("#disconnect").removeAttr("disabled"); return false; }); }); //发送字符串消息 $(function() { $("#sendForm").submit(function() { if (ws) { var textField = $("#textField"); ws.send(textField.val()); log("我说:" + textField.val()); textField.val(""); textField.focus(); } return false; }); }); //发送arraybuffer(二进制文件) $(function() { $("#sendFileForm").submit(function() { var inputElement = document.getElementById("file"); var fileList = inputElement.files; for ( var i = 0; i < fileList.length ; i++) { console.log(fileList[i]); log(fileList[i].name); //发送文件名 ws.send(fileList[i].name); // reader.readAsBinaryString(fileList[i]); //读取文件 var reader = new FileReader(); reader.readAsArrayBuffer(fileList[i]); // reader.readAsText(fileList[i]); //文件读取完毕后该函数响应 reader.onload = function loaded(evt) { var binaryString = evt.target.result; // Handle UTF-16 file dump log("\n开始发送文件"); ws.send(binaryString); } } return false; }); }); $(function() { $("#disconnect").click(function() { if (ws) { $("#log").empty(); ws.close(); ws = null; } return false; }); }); $(function() { $("#reset").click(function() { $("#log").empty(); return false; }); }); </script> </ head > < body > < form id="uriForm"> < input type="text" id="uri" value="ws://192.168.31.37:7181" style="width: 200px;"> < input type="submit" id="connect" value="Connect">< input type="button" id="disconnect" value="Disconnect" disabled="disabled"> </ form > < br > < form id="sendFileForm"> < input id="file" type="file" multiple /> < input type="submit" value="Send" /> < input type="button" id="reset" value="清空消息框"/> </ form > < br > < form id="sendForm"> < input type="text" id="textField" value="" style="width: 200px;"> < input type="submit" value="Send"> </ form > < br > < form > < textarea id="log" rows="30" cols="100" style="font-family: monospace; color: red;"></ textarea > </ form > < br > </ body > </ html > |