2025-03-28 09:49:56 +08:00

158 lines
5.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Web;
using SuperWebSocket;
using HZQR.Common;
namespace TestDemo.Helper
{
public class WebSocketDemo
{
}
public static class WebSocketManager
{
static Dictionary<string, WebSocketSession> sessionDics = new Dictionary<string, WebSocketSession>();
static WebSocketServer webSocketServer;
public static void Init()
{
var ip = "172.16.155.172"; //GetLocalIP();
webSocketServer = new WebSocketServer();
var isSetup = webSocketServer.Setup(ip, 7119);
LogUtil.WriteLog("WebSocketManager 服务器端启动" + (isSetup ? "成功" : "失败"));
if (!isSetup) return;
webSocketServer.NewSessionConnected += WebSocketServer_NewSessionConnected;
webSocketServer.SessionClosed += WebSocketServer_SessionClosed;
webSocketServer.NewMessageReceived += WebSocketServer_NewMessageReceived;
var isStart = webSocketServer.Start();
LogUtil.WriteLog("WebSocketManager 服务器端侦听" + (isStart ? "成功" : "失败"));
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="session"></param>
/// <param name="value"></param>
private static void WebSocketServer_NewMessageReceived(WebSocketSession session, string value)
{
LogUtil.WriteLog("WebSocketManager 接收消息 \r\n" + value);
if (!string.IsNullOrWhiteSpace(value))
{
if (!sessionDics.ContainsKey(value))
sessionDics.Add(value, session);
else
sessionDics[value] = session;
}
SendMsgToRemotePoint("888888042002", DateTime.Now.ToString());
}
/// <summary>
/// 下线
/// </summary>
/// <param name="session"></param>
/// <param name="value"></param>
private static void WebSocketServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
{
LogUtil.WriteLog(string.Format("WebSocketManager{0} {1}下线", value, session.RemoteEndPoint));
}
/// <summary>
/// 上线
/// </summary>
/// <param name="session"></param>
private static void WebSocketServer_NewSessionConnected(WebSocketSession session)
{
LogUtil.WriteLog(string.Format("WebSocketManager{0}上线", session.RemoteEndPoint));
session.Send(DateTime.Now.ToString());
}
/// <summary>
/// 发送消息到客户端
/// </summary>
/// <param name="value"></param>
/// <param name="msg"></param>
public static void SendMsgToRemotePoint(string value, string msg)
{
if (sessionDics.ContainsKey(value))
{
var webSocketSession = sessionDics[value];
if (webSocketSession != null)
{
webSocketSession.Send(msg);
}
}
}
/// <summary>
/// 获取本地IP等信息
/// </summary>
/// <returns></returns>
public static string GetLocalIP()
{
//本机IP地址
string strLocalIP = "";
//得到计算机名
string strPcName = Dns.GetHostName();
//得到本机IP地址数组
IPHostEntry ipEntry = Dns.GetHostEntry(strPcName);
//遍历数组
foreach (var IPadd in ipEntry.AddressList)
{
//判断当前字符串是否为正确IP地址
if (IsRightIP(IPadd.ToString()))
{
//得到本地IP地址
strLocalIP = IPadd.ToString();
//结束循环
break;
}
}
//返回本地IP地址
return strLocalIP;
}
/// <summary>
/// 判断是否为正确的IP地址
/// </summary>
/// <param name="strIPadd">需要判断的字符串</param>
/// <returns>true = 是 false = 否</returns>
private static bool IsRightIP(string strIPadd)
{
//利用正则表达式判断字符串是否符合IPv4格式
if (Regex.IsMatch(strIPadd, "[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}"))
{
//根据小数点分拆字符串
string[] ips = strIPadd.Split('.');
if (ips.Length == 4 || ips.Length == 6)
{
//如果符合IPv4规则
if (System.Int32.Parse(ips[0]) < 256 && System.Int32.Parse(ips[1]) < 256 &
System.Int32.Parse(ips[2]) < 256 & System.Int32.Parse(ips[3]) < 256)
//正确
return true;
//如果不符合
else
//错误
return false;
}
else
//错误
return false;
}
else
//错误
return false;
}
}
}