-1

我正在使用Microsoft.Web.WebSockets如下所示,我如何在连接时分配哪个用户正在连接而不在查询字符串中设置他的 ID,我在服务器中有一个属性项,但在客户端我找不到类似的东西。

这是我的服务器:

using System.Linq;
using Microsoft.Web.WebSockets;

namespace TestSocket
{
    public class TestWebSocketHandler : WebSocketHandler
    {
        private static WebSocketCollection clients = new WebSocketCollection();
        private string name;
        public override void OnOpen()
        {
            this.name = this.WebSocketContext.QueryString["name"];
            var a = this.WebSocketContext.Items["test"];
            var all = clients.Where(n => ((TestWebSocketHandler)n).name == this.name);
            if (all.Count() > 0)
            {
                clients.Remove((TestWebSocketHandler)all.ToList()[0]);
            }
            clients.Add(this);
        }

        public override void OnMessage(string message)
        {
            // WebSocketPacket webso = JsonConvert.DeserializeObject<WebSocketPacket>(message);
            //  WebSocketPacket response = new WebSocketPacket();
            var channel = clients.FirstOrDefault(n => ((TestWebSocketHandler)n).name == message);
            if (channel != null)
                channel.Send("test 123");
        }

        public override void OnClose()
        {
            clients.Remove(this);

        }
    }
}

这是我的客户:

var ws = new WebSocket("ws://localhost:30455//ws.ashx");
ws.Connect();
ws.Send("BALUS");

以及如何加密服务器和客户端之间发送的数据?

4

1 回答 1

0

我如何在连接时指定正在连接的用户而不在查询字符串中设置他的 ID

WebSocket 连接握手是使用 HTTPGET请求执行的。在GET请求中,只有两种方法可以将自定义数据传递到 HTTP 服务器 - 通过 URL 查询字符串和通过自定义 HTTP 标头。大多数 WebSocket 客户端库不允许您在 WebSocket 握手期间指定自定义 HTTP 标头,因此只留下 URL 查询字符串(如果您正在编写自己的 HTTP 客户端,那么您可以发送任何您想要的 HTTP 标头)。

如何加密服务器和客户端之间发送的数据?

使用wss://代替ws://

于 2018-06-06T17:21:52.240 回答