WebSocket4Net을 달성하기 위해 서버와 클라이언트를 구현 SuperWebSocket

서버와 클라이언트를 구현 SuperWebSocket WebSocket4Net 다음의 구체적인 실현을 달성하기 :

서버를 구현 SuperWebSocket

참고 : 저자는 vs2019 엔터프라이즈 버전을 기반으로, 모든 항목은 닷넷 Framwork4.7 버전 (수요가 있기 때문에 웹 소켓 닷넷 Framwork4.0 이상)

1, 새로운 콘솔 프로젝트 ConsoleAppWebsocketServer는 서버로, SuperWebSocketNETServer을 선택 오른쪽 프로젝트 관리 Nuget 패키지 검색 SuperWebSocket을 선택 설치의 오른쪽 클릭

설치가 완료되면 다음과 같이 설치가 완료 될 때까지 기다립니다 것은,이 프로젝트는 더 많은 참조 라이브러리 될 것입니다 

,

 

다음과 같이 프로젝트의 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 ( "设置服务监听失败!");
}
경우 (webSocketServer.Start (!))
{
Console.WriteLine ( "启动服务监听失败!");
}
Console.WriteLine ( "启动服务监听成功!");
Console.WriteLine ( "종료하려면 아무 키나 누르십시오 ...");
Console.ReadKey ();
webSocketServer.Dispose를 ();
}

개인은 정적 무효 (WebSocketSession 세션) WebSocketServer_NewSessionConnected
{
문자열 MSG = $ "{DateTime.Now.ToString ( 'HH : MM : SS")}客户端{GetwebSocketSessionName (세션)加入} ";
Console.WriteLine ($ "{MSG}");
SendToAll (세션, MSG);
}

개인은 정적 무효 (WebSocketSession 세션 문자열 값) WebSocketServer_NewMessageReceived
{
}服务端收到客户端{GetwebSocketSessionName (세션)}发送数据{문자열 MSG = $ "{DateTime.Now.ToString (": mm SS "HH)을 값}";
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을 반환 .SessionID);
}

/// <요약>
모든 /// 방송 동기화 메시지는 푸시 클라이언트
/// </ 요약>
/// <PARAM NAME = "webSocketSession"> </ PARAM>
= "MSG /// <PARAM 이름 "> </ 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