在连接上发送Websocket参数但不在查询字符串上发送

时间:2018-06-06 14:39:38

标签: .net sockets websocket websocket-sharp

我正在使用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");

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

1 个答案:

答案 0 :(得分:0)

  

如何在连接时分配哪个用户正在连接而不在查询字符串中设置其ID

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

  

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

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