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" οnclick="Connect();">Connect</button> 
<button id="send" οnclick="Send();">Send</button> 
<button id="close" οnclick="Close();">Close</button>
</body>
</html>

  

4、运行结果

到此位置所有的准备工作都完成了,一个服务端ConsoleAppWebsocketServer,两个客户端(ConsoleAppWebsocketClient,websockettest.html),那么接下来运行项目

 解决方案 右键,属性,设置启动项目如下:

 

 

 启动服务端ConsoleAppWebsocketServer,客户端ConsoleAppWebsocketClient之后,再去手动点击websockettest.html,

运行效果:

 

源码下载:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建一个窗体程序的 WebSocket 服务,你需要使用一个 WebSocket 服务器库和一个窗体应用程序框架。下面是一个简单的示例,使用 C# 和 SuperWebSocket 库: 1. 首先,你需要在你的项目中添加 SuperWebSocket 库的引用。你可以在 NuGet 包管理器中搜索 SuperWebSocket 并安装它。 2. 在你的窗体应用程序中,打开一个 WebSocket 服务器并监听客户连接。以下示例代码演示了如何使用 SuperWebSocket 库创建一个 WebSocket 服务器: ```csharp using SuperWebSocket; public partial class Form1 : Form { WebSocketServer websocketServer; public Form1() { InitializeComponent(); // 创建 WebSocket 服务器实例 websocketServer = new WebSocketServer(); // 设置服务口号 websocketServer.Setup(8080); // 监听客户连接 websocketServer.NewSessionConnected += WebsocketServer_NewSessionConnected; // 启动服务websocketServer.Start(); } private void WebsocketServer_NewSessionConnected(WebSocketSession session) { // 客户连接成功后,可以在这里处理收到的消息 session.Send("Welcome to the server!"); } } ``` 3. 当有客户连接到 WebSocket 服务器时,你可以在 `WebsocketServer_NewSessionConnected` 事件处理程序中处理收到的消息。以下示例代码演示了如何在窗体应用程序中向所有客户广播消息: ```csharp private void WebsocketServer_NewSessionConnected(WebSocketSession session) { // 客户连接成功后,可以在这里处理收到的消息 session.Send("Welcome to the server!"); // 向所有客户广播消息 websocketServer.Broadcast("A new client has connected!"); } ``` 4. 最后,你需要在窗体应用程序关闭时停止 WebSocket 服务器。以下示例代码演示了如何在窗体关闭时停止服务器: ```csharp private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // 停止 WebSocket 服务websocketServer.Stop(); } ``` 这就是一个简单的窗体程序 WebSocket 服务器的基本结构。你可以根据自己的需求修改代码并实现更复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值