| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Collections.Concurrent;
- using System.Net;
- using HPSocket;
- using HPSocket.Tcp;
- using HPSocket.Ssl;
- using HPSocket.WebSocket;
- using HXX.Scanner.Common;
- namespace HXX.Scanner.Socket
- {
- class SocketServer
- {
- public static IWebSocketServer server;
- public static bool Start(string url)
- {
- try
- {
- var wss = false;
- //var url = (wss ? "wss" : "ws") + "://127.0.0.1:9999";
- server = new WebSocketServer(url);
- // 忽略压缩扩展, 不忽略支持数据包压缩解压缩, 主流浏览器都支持
- server.IgnoreCompressionExtensions = false;
- // 自动发送ping消息的时间间隔
- // 毫秒,0不自动发送,默认不发送(多数分机房的防火墙都在1分钟甚至更短时间检测空连接,超时无交互则被踢,如果间隔过长,可能被机房防火墙误杀)
- // 目前浏览器都不支持在客户端发送ping消息,所以一般在服务器发送ping,在客户端响应接收到ping消息之后再对服务器发送pong,或客户端主动pong,服务器响应pong再发送ping给客户端
- //server.PingInterval = 10000;
- // 最大封包大小
- server.MaxPacketSize = 0x4000;
- // 子协议, 微信接口等会发送自定义的子协议,询问服务器是不是支持, 如果需要配置请再此配置
- server.SubProtocols = null;
- if (wss)
- {
- // wss请开启此设置, 设置ssl配置, 会自动初始化ssl环境
- //server.SslConfiguration = new SslConfiguration
- //{
- // // 不从内存加载证书
- // FromMemory = false,
- // // ssl证书配置, 支持单向验证
- // VerifyMode = SslVerifyMode.Peer,
- // CaPemCertFileOrPath = "ssl-cert\\ca.crt",
- // PemCertFile = "ssl-cert\\server.cer",
- // PemKeyFile = "ssl-cert\\server.key",
- // KeyPassword = "123456",
- //};
- try
- {
- server.SslConfiguration = new SslConfiguration
- {
- // 不从内存加载证书
- FromMemory = false,
- // ssl证书配置, 支持单向验证
- VerifyMode = SslVerifyMode.Peer,
- CaPemCertFileOrPath = "ssl-cert\\ca.crt",
- PemCertFile = "ssl\\client.cer",
- PemKeyFile = "ssl-cert\\server.key",
- KeyPassword = "123456",
- };
- }catch(Exception ee)
- {
- }
- }
- if (!server.Start())
- {
- server = null;
- LogManager.WriteLog("服务开启失败");
- return false;
- }
- else
- {
- // 注册ws服务器, 未对path注册服务则无法访问
- // 要注册的服务必须继承自HPSocket.WebSocket.IHub接口
- // 注册欢迎服务, 客户端通过ws[s]://127.0.0.1:8800连接
- server.AddHub<biz_Hub>("/");
- // 注册回显服务, 客户端通过ws[s]://127.0.0.1:8800/echo连接
- //server.AddHub<EchoHub>("/echo");
- LogManager.WriteLog("服务开启成功");
- return true;
- }
- }
- catch (Exception ee)
- {
- server = null;
- LogManager.WriteLog(ee);
- return false;
- }
- }
- public static void Send(IntPtr connId, byte[] data)
- {
- server.Send(connId, OpCode.Text, data, data.Length);
- }
- public static void Send(IntPtr connId, string data)
- {
- server.Text(connId, data);
- }
- }
- }
|