【问题标题】:Send Websocket param on connect but not query string在连接时发送 Websocket 参数但不发送查询字符串
【发布时间】:2018-06-06 14:39:38
【问题描述】:

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

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

【问题讨论】:

    标签: .net sockets websocket websocket-sharp


    【解决方案1】:

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

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

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

    使用wss:// 而不是ws://

    【讨论】:

    • 好的交易,我怎样才能以没有任何拥有链接的人可以连接的方式验证连接?
    • @User7291 TLS 和证书对此很有用。 WSS 是基于 TLS 的 WebSocket。或者,由于 WebSocket 握手是通过 HTTP/S 执行的,因此也可以使用 HTTP 身份验证。
    • 你能给我提供一个客户端/服务器的例子吗?
    • 你的意思是在cookie中设置授权?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2019-04-09
    • 1970-01-01
    相关资源
    最近更新 更多