效果圖

(前沿).WebSocket是一種基于TCP/IP通訊一種新的通訊協定,它實作了伺服器和用戶端雙工通訊,允許伺服器主動發送給用戶端.
(浏覽器對Socket的支援) .
- 浏覽器 支援情況 Chrome谷歌浏覽器 Chrome version 4+支援
- Firefox火狐浏覽器 Firefox version 5+支援
- IE微軟浏覽器 IE version 10+支援(我們一般win7自帶的是IE11)
- Safari蘋果浏覽器 IOS 5+支援
- Android Brower安卓浏覽器 Android 4.5+支援
伺服器對Socket的支援
- 廠商 應用伺服器 備注 IBM WebSphere WebSphere 8.0以上版本支援,
- 7.X之前版本結合MQTT支援類似的HTTP長連接配接 甲骨文 WebLogic WebLogic 12c 支援,
- 11g以及10g版本通過HTTP Publish支援類似的HTTP長連接配接 微軟 IIS IIS 7.0+支援
- Apache Tomcat Tomcat 7.0.5+支援 Jetty Jetty 7.0+支援
cs
using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace socketDemo
{
class Program
{
static void Main(string[] args)
{
//用戶端url以及其對應的Socket對象字典
IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocketConnection>();
//建立
WebSocketServer server = new WebSocketServer("ws://0.0.0.0:30000");//監聽所有的的位址
//出錯後進行重新開機
server.RestartAfterListenError = true;
//開始監聽
server.Start(socket =>
{
socket.OnOpen = () => //連接配接建立事件
{
//擷取用戶端網頁的url
string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
dic_Sockets.Add(clientUrl, socket);
Console.WriteLine(DateTime.Now.ToString() + "|伺服器:和用戶端網頁:" + clientUrl + " 建立WebSock連接配接!");
};
socket.OnClose = () => //連接配接關閉事件
{
string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
//如果存在這個用戶端,那麼對這個socket進行移除
if (dic_Sockets.ContainsKey(clientUrl))
{
//注:Fleck中有釋放
//關閉對象連接配接
//if (dic_Sockets[clientUrl] != null)
//{
//dic_Sockets[clientUrl].Close();
//}
dic_Sockets.Remove(clientUrl);
}
Console.WriteLine(DateTime.Now.ToString() + "|伺服器:和用戶端網頁:" + clientUrl + " 斷開WebSock連接配接!");
};
socket.OnMessage = message => //接受用戶端網頁消息事件
{
string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
Console.WriteLine(DateTime.Now.ToString() + "|伺服器:【收到】來用戶端網頁:" + clientUrl + "的資訊:\n" + message);
};
});
Console.ReadKey();
foreach (var item in dic_Sockets.Values)
{
if (item.IsAvailable == true)
{
item.Send("伺服器消息:" + DateTime.Now.ToString());
}
}
Console.ReadKey();
//關閉與用戶端的所有的連接配接
foreach (var item in dic_Sockets.Values)
{
if (item != null)
{
item.Close();
}
}
Console.ReadKey();
}
}
}
html:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>WebSocket測試</title>
<style>
.div1
{
height:88px;
width:173px;
border:1px solid blue;
margin:auto;
}
h4
{
margin:auto;
}
</style>
<script>
var webSocket = {};
//建立websockt
function CreateWebSocket() {
webSocket = new WebSocket("ws://127.0.0.1:30000");
webSocket.onopen = WebSokectOnOpen;
webSocket.onmessage = WebSocketOnMessage;
webSocket.onclose = WebSocketOnClose;
};
//建立連接配接事件
function WebSokectOnOpen() {
alert("已經打開連接配接!");
webSocket.Send("WebSocketCreate Success!");
};
//監聽事件
function WebSocketOnMessage(event) {
//監聽來自用戶端的資料
alert(event.data);
};
function WebSocketOnClose() {
//監聽來自用戶端的資料
alert('和伺服器斷開連接配接');
};
//發送事件
function WebSocketSendMsg() {
//擷取text中的值
var text = document.getElementById("Text1").value;
//發送到伺服器
webSocket.send(text);
}
</script>
</head>
<body onload="CreateWebSocket()">
<div class="div1">
<input type="text" id="Text1" />
<input type="button" onclick="WebSocketSendMsg()" value="發送資料" />
</div>
</body>
</html>