SuperWebSocket实现服务端和WebSocket4Net实现客户端
SuperWebSocket实现服务端和WebSocket4Net实现客户端具体实现如下:
SuperWebSocket实现服务端
注:本作者是基于vs2019 enterprise版本,所有项目均为.Net Framwork4.7版本(因为WebSocket需求是.Net Framwork4.0以上版本)
1、新建控制台项目ConsoleAppWebsocketServer,作为服务端,选择项目右键管理Nuget程序包,搜索 SuperWebSocket ,选择SuperWebSocketNETServer,点击右侧 安装,
等待安装完成,安装完成以后,项目会多出很多引用库,如下
,
项目的Program.cs内容如下:
using SuperWebSocket;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace ConsoleAppWebsocketServer
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("服务端");
WebSocketServer webSocketServer = new WebSocketServer();
webSocketServer.NewSessionConnected += WebSocketServer_NewSessionConnected;
webSocketServer.NewMessageReceived += WebSocketServer_NewMessageReceived;
webSocketServer.SessionClosed += WebSocketServer_SessionClosed;
if (!webSocketServer.Setup("127.0.0.1", 1234))
{
Console.WriteLine("设置服务监听失败!");
}
if (!webSocketServer.Start())
{
Console.WriteLine("启动服务监听失败!");
}
Console.WriteLine("启动服务监听成功!");
Console.WriteLine("按任意键结束。。。");
Console.ReadKey();
webSocketServer.Dispose();
}
private static void WebSocketServer_NewSessionConnected(WebSocketSession session)
{
string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 客户端:{GetwebSocketSessionName(session)} 加入";
Console.WriteLine($"{msg}");
SendToAll(session, msg);
}
private static void WebSocketServer_NewMessageReceived(WebSocketSession session, string value)
{
string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 服务端收到客户端:{GetwebSocketSessionName(session)}发送数据:{value}";
Console.WriteLine($"{msg}");
SendToAll(session, value);
}
private static void WebSocketServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
{
string msg = $"{DateTime.Now.ToString("HH:mm:ss")} 客户端:{GetwebSocketSessionName(session)}关闭,原因:{value}";
Console.WriteLine($"{msg}");
SendToAll(session, msg);
}
/// <summary>
/// 获取webSocketSession的名称
/// </summary>
/// <param name="webSocketSession"></param>
public static string GetwebSocketSessionName(WebSocketSession webSocketSession)
{
return HttpUtility.UrlDecode(webSocketSession.SessionID);
}
/// <summary>
/// 广播,同步推送消息给所有的客户端
/// </summary>
/// <param name="webSocketSession"></param>
/// <param name="msg"></param>
public static void SendToAll(WebSocketSession webSocketSession, string msg)
{
foreach (var item in webSocketSession.AppServer.GetAllSessions())
{
item.Send(msg);
}
}
}
}
WebSocket4Net实现客户端
2、新建控制台项目ConsoleAppWebsocketClient,作为客户端,选择项目右键管理Nuget程序包,为了测试SuperWebSocket作为服务端的功能,本文客户端使用了WebSocket4Net,同样也可以使用 SuperWebSocket ,本项目选择WebSocket4Net,点击右侧 安装,等待安装完成,安装完成之后,同样项目下会多一些引用库,如下:
项目的Program.cs内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocket4Net;
using System.Threading;
namespace ConsoleAppWebsocketClient
{
class Program
{
public static WebSocket webSocket4Net = null;
static void Main(string[] args)
{
Console.WriteLine("客户端");
webSocket4Net = new WebSocket("ws://127.0.0.1:1234");
webSocket4Net.Opened += WebSocket4Net_Opened;
webSocket4Net.MessageReceived += WebSocket4Net_MessageReceived;
webSocket4Net.Open();
Console.WriteLine("客户端连接成功!");
Thread thread = new Thread(ClientSendMsgToServer);
thread.IsBackground = true;
thread.Start();
Console.WriteLine("按任意键结束。。。");
Console.ReadKey();
webSocket4Net.Dispose();
}
public static void ClientSendMsgToServer()
{
int i = 88;
while (true)
{
//Console.WriteLine($"客户端发送数据{i++}");
webSocket4Net.Send($"{i++}");
Thread.Sleep(TimeSpan.FromSeconds(5));
}
}
private static void WebSocket4Net_MessageReceived(object sender, MessageReceivedEventArgs e)
{
Console.WriteLine($"服务端回复数据:{e.Message}!");
}
private static void WebSocket4Net_Opened(object sender, EventArgs e)
{
webSocket4Net.Send($"客户端准备发送数据!");
}
}
}
3、测试
为了更好的看到测试效果,又多使用了js客户端来测试,添加html文件,命名websockettest.html,内容如下:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<meta name="author" content="https://www.baidu.com" />
<title>websocket test</title>
<script>
var socket;
function Connect(){
try{
socket=new WebSocket('ws://127.0.0.1:1234');
}catch(e){
alert('error');
return;
}
socket.onopen = sOpen;
socket.onerror = sError;
socket.onmessage= sMessage;
socket.onclose= sClose;
}
function sOpen(){
alert('connect success!');
}
function sError(e){
alert("error " + e);
}
function sMessage(msg){
document.getElementById("msgrecv").value = msg.data;
}
function sClose(e){
alert("connect closed:" + e.code);
}
function Send(){
socket.send(document.getElementById("msg").value);
}
function Close(){
socket.close();
}
</script>
</head>
<body>
<input id="msg" type="text" size = "200" >
<input id="msgrecv" type="text" size = "200">
<button id="connect" onclick="Connect();">Connect</button>
<button id="send" onclick="Send();">Send</button>
<button id="close" onclick="Close();">Close</button>
</body>
</html>
4、运行结果
到此位置所有的准备工作都完成了,一个服务端ConsoleAppWebsocketServer,两个客户端(ConsoleAppWebsocketClient,websockettest.html),那么接下来运行项目
解决方案 右键,属性,设置启动项目如下:
启动服务端ConsoleAppWebsocketServer,客户端ConsoleAppWebsocketClient之后,再去手动点击websockettest.html,
运行效果:
SuperWebSocket实现服务端和WebSocket4Net实现客户端的更多相关文章
- WebSocket——SuperWebSocket实现服务端和客户端
WebSocket——SuperWebSocket实现服务端和客户端具体实现如下: 注:本作者是基于vs2019 enterprise版本,所有项目均为.Net Framwork4.7版本(因为Web ...
- git的CentOS服务端安装和windows客户端的使用
git的CentOS服务端安装和windows客户端的使用 此教程以 搬瓦工vps CentOS 6 x64 的系统为环境,搭建 git 服务端.windows 7 系统为客户端. git客户端 在W ...
- Identity4实现服务端+api资源控制+客户端请求
准备写一些关于Identity4相关的东西,最近也比较对这方面感兴趣.所有做个开篇笔记记录一下,以便督促自己下一个技术方案方向 已经写好的入门级别Identity4的服务+api资源访问控制和简单的客 ...
- windows10 64位 安装mysql服务端 并使用navicat客户端链接 掉的一堆坑
1.目的 安装mysql服务端 并使用navicat客户端链接 2.过程 1)下载mysql服务端 下载过程(参考https://blog.csdn.net/youxianzide/article/d ...
- thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)
关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1) Linux下环境配置 ...
- C# WebSocket 服务端示例代码 + HTML5客户端示例代码
WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...
- 自己实现FormsAuthentication.SetAuthCookie方法,怎样在ASP.NET服务端代码中删除客户端Cookie
如何手动设置AuthCookie ASP.NET中实现可以自己实现FormsAuthentication.SetAuthCookie方法,控制更为灵活 /// <summary> /// ...
- FireFly 服务端 Unity3D黑暗世界 客户端 问题
启动服务端成功截图: 连接成功截图: 测试服务端是否启动成功: 在Web输入:http://localhost:11009/ 按回车 (查看cmd启动的服务端 是否多出如下显示) 服务端启动成功.P ...
- python摸爬滚打之day29----socketserver实现服务端和多个客户端通信
什么是socketserver? TCP协议下的socket实现了服务端一次只能和一个客户端进行通信, 而socketserver实现了服务端一次能和多个客户端进行通信, 底层调用的还是socket. ...
随机推荐
- 13.5. zipfile — Work with ZIP archives
13.5. zipfile — Work with ZIP archives Source code: Lib/zipfile.py The ZIP file format is a common a ...
- 大数据集群Linux CentOS 7.6 系统调优篇
大数据集群Linux CentOS 7.6 系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设置主机hosts文件 1>.修改主机名 [root@node100 ...
- XSLT知识点【一】
XSL 指扩展样式表语言(EXtensible Stylesheet Language). 它起始于 XSL,结束于 XSLT.XPath 以及 XSL-FO. 起始于 XSL------CSS = ...
- puppeteer UI自动化测试demo(一)
一.简介 这个不大常见,比较常见的是selenium和weddriver: 所以就增加一个说明,来自官网的. Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTool ...
- java基础(10)---stream流
一.stream的应用场景 for遍历的冗余场景: stream的写法: 二.获取Stream流的常用方式 三.Stream的map映射方法 更简单的写法: 四.Stream的filter过滤方法 ...
- Java精通并发-wait与notify及线程同步系统总结
notifyAll(): 在上两次中对于Object的wait()和notify()方法的官方doc进行了通读,上一次https://www.cnblogs.com/webor2006/p/11407 ...
- C#随机数Random
一.常用操作 NextDouble():返回0-1.0之间的随机数 Next():返回非负随机数(0-216) Next(i):返回一个小于i的非负随机数 Next(i,j):生成i – j 的随机数 ...
- go实现文件的上传
上传端 send.go package main import ( "fmt" "io" "net" "os") fun ...
- eclipse更改jdk版本(1.6》1.7 以此类推)
电脑装了两个版本的JDK,在开发项目的时候默认使用的是高版本的,但是公司又要求用低版本的JDK来编译,肿么办???么事,小编这就来给你支招! eclipse 安装两个版本的JDK 1 打开eclips ...
- webuploader+asp.net如何实现分片+断点续传
文件夹数据库处理逻辑 public class DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject() ...