WebSocket4Netを達成するために、サーバーとクライアントを実装SuperWebSocket

サーバーとクライアントを実装SuperWebSocket WebSocket4Net、以下の具体的な実現を達成:

サーバーを実装SuperWebSocket

注意:著者は、vs2019エンタープライズバージョンに基づいて、すべての項目がある。ネットFramwork4.7バージョン(需要があるので、WebSocketをネットFramwork4.0以降)

1、新しいコンソールプロジェクトConsoleAppWebsocketServerは、サーバとして、右プロジェクト管理Nugetパッケージ検索SuperWebSocketを選択し、SuperWebSocketNETServerを選択し、インストールの右側をクリックして、

インストールが完了した後、次のように、プロジェクトは多くの参照ライブラリとなり、インストールが完了するまで待ちます 

 

次のようにプロジェクトのProgram.csの内容は以下のとおりです。

SuperWebSocketを使用しました。
システムを使用しました。
System.Collections.Genericを使用しました。
System.Linqのを使用しました。
System.Textのを使用しました。
System.Threading.Tasksを使用しました。
System.Webのを使用して、

名前空間ConsoleAppWebsocketServer
{
クラスプログラム
{
静的な無効メイン(文字列[] args)
{
Console.WriteLineを( "服务端");
WebSocketServer webSocketServer =新しいWebSocketServer();
webSocketServer.NewSessionConnected + = WebSocketServer_NewSessionConnected。
webSocketServer.NewMessageReceived + = WebSocketServer_NewMessageReceived。
webSocketServer.SessionClosed + = WebSocketServer_SessionClosed。
もし(webSocketServer.Setup( "127.0.0.1"、1234年)!)
{
Console.WriteLineを( "设置服务监听失败!");
}
IF(webSocketServer.Start()!)
{
Console.WriteLineを( "启动服务监听失败!")。
}
Console.WriteLineを( "启动服务监听成功!");
Console.WriteLineを( "終了する任意のキーを押してください...");
Console.ReadKey();
webSocketServer.Dispose();
}

プライベート静的ボイドWebSocketServer_NewSessionConnected(WebSocketSessionセッション)
{
文字列MSG = $ "{DateTime.Now.ToString(" HH:MM:SS ")}客户端{GetwebSocketSessionName(セッション)}加入"。
Console.WriteLineを($ "{MSG}")。
SendToAll(セッション、MSG)。
}

プライベート静的ボイドWebSocketServer_NewMessageReceived(WebSocketSessionセッション、文字列値)
{
文字列MSG = $ "{DateTime.Now.ToString(" HH:MM:SS ")}服务端收到客户端{GetwebSocketSessionName(セッション)}发送数据:{値}";
Console.WriteLineを($ "{MSG}")。
SendToAll(セッション、値)。
}

プライベート静的ボイド(WebSocketSessionセッション、SuperSocket.SocketBase.CloseReason値)WebSocketServer_SessionClosed
{
ストリングMSG = $ "{DateTime.Now.ToString(" HH:MM:SS ")}客户端{GetwebSocketSessionName(セッション)}关闭、原因: {値}";
Console.WriteLineを($ "{MSG}")。
SendToAll(セッション、MSG)。
}

/// <要約>
///获取webSocketSession的名称
/// </要約>
/// <PARAM NAME = "webSocketSession"> </ PARAM>
パブリック静的文字列GetwebSocketSessionName(WebSocketSession webSocketSession)
{
(webSocketSession HttpUtility.UrlDecodeを返します。セッションID);
}

/// <まとめ>
すべての///放送同期メッセージは、クライアントプッシュする
/// </要約>
/// <PARAM NAME = "webSocketSession"> </ param>の
/// <PARAM NAME =「MSGを「> </ PARAM>
パブリック静的ボイドSendToAll(webSocketSession webSocketSession、文字列MSG)
{
foreachの(アイテムのvar webSocketSession.AppServer.GetAllSessions())
{
Item.Send(MSG);
}
}
}
}

 

クライアントのWebSocket4Net実装

 2、新しいコンソールプロジェクトConsoleAppWebsocketClientは、クライアントとして、サーバの機能としてSuperWebSocketをテストするために、このクライアントが使用して、右のプロジェクト管理Nugetパッケージを選択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,

运行效果:

 

おすすめ

転載: www.cnblogs.com/1175429393wljblog/p/11210910.html
おすすめ