javascript - 使用 Fleck 的 WebSocket。 WSS

标签 javascript websocket wss

我尝试使用安全层 WSS 创建简单的聊天应用程序。没有 wss 它可以工作。这是我的代码:

        FleckLog.Level = LogLevel.Info;
        var allsockets = new List<IWebSocketConnection>();
        var server = new WebSocketServer("wss://localhost:8181");
        server.Certificate = new X509Certificate2(@"C:\Users\user\Desktop\sharpchat-master\server\Sharpchat\Certificate.pfx", "123");

        server.Start(socket =>
        {
            socket.OnOpen = () =>
                {   //See socket.ConnectionInfo.* for additional informations
                    Console.WriteLine(String.Empty);
                    Console.WriteLine("[NEW CLIENT CONNECTION]======================");
                    Console.WriteLine("GUID: " + socket.ConnectionInfo.Id);
                    Console.WriteLine("IP: " + socket.ConnectionInfo.ClientIpAddress);
                    Console.WriteLine("Port: " + socket.ConnectionInfo.ClientPort);
                    Console.WriteLine("=============================================");
                    Console.WriteLine(String.Empty);
                    allsockets.Add(socket);

                };

            socket.OnClose = () =>
            {
                    Console.WriteLine(String.Empty);
                    Console.WriteLine("[DISCONNECTED CLIENT]=======================");
                    Console.WriteLine("GUID: " + socket.ConnectionInfo.Id);
                    Console.WriteLine("IP: " + socket.ConnectionInfo.ClientIpAddress);
                    Console.WriteLine("Port: " + socket.ConnectionInfo.ClientPort);
                    Console.WriteLine("=============================================");
                    Console.WriteLine(String.Empty);
                    allsockets.Remove(socket);
                };

            socket.OnMessage = (message) =>
            {
                //TODO: Json.Net Deserialize
                Console.WriteLine("[JSON MESSAGE] " + message);
                allsockets.ToList().ForEach(s => s.Send(message));
            };
        });

        var input = Console.ReadLine();
        while (input != "exit")
        {
            foreach (var socket in allsockets.ToList())
            {
                socket.Send(input);
            }

            input = Console.ReadLine();
        }

当客户端连接到服务器时出现异常:

    [Warn] Failed to Authenticate System.AggregateEx
ception: One or more errors occurred. ---> System.IO.IOException: The handshake
failed due to an unexpected packet format.
   at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncRes
ult lazyResult)
   at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)

   at System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult asyncRe
sult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar,
Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchron
ization)
   --- End of inner exception stack trace ---
---> (Inner Exception #0) System.IO.IOException: The handshake failed due to an
unexpected packet format.
   at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncRes
ult lazyResult)
   at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)

   at System.Net.Security.SslStream.EndAuthenticateAsServer(IAsyncResult asyncRe
sult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar,
Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchron
ization)<---

这是 JavaScript 中的客户端代码:

    // Websocket Endpoint url
var URL = 'wss://localhost:8181';

var chatClient = null;

function connect () {
    chatClient = new WebSocket(URL);
    chatClient.onmessage = function (event) {
        var messagesArea = document.getElementById("messages");
        var jsonObj = JSON.parse(event.data);
        var message = "<"+ jsonObj.user + "> " + jsonObj.message + "\r\n";
        messagesArea.value = messagesArea.value + message;
        messagesArea.scrollTop = messagesArea.scrollHeight;
    };
}

function disconnect () {
    chatClient.close();
    }

function sendMessage() {
    var user = document.getElementById("userName").value.trim();
    if (user === "")
        alert ("Please enter your name!");

    var inputElement = document.getElementById("messageInput");
    var message = inputElement.value.trim();
    if (message !== "") {
        var jsonObj = {"user" : user, "message" : message};
        chatClient.send(JSON.stringify(jsonObj));
        inputElement.value = "";
    }
    inputElement.focus();
}

谁能帮我解决这个问题吗?

非常感谢!

最佳答案

在 URL 中使用完整域名,即 var URL = 'wss://localhost.company.com:8181';

关于javascript - 使用 Fleck 的 WebSocket。 WSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273229/

相关文章:

javascript - Websocket 二进制数据消息 (ArrayBuffer)

c++ - Zaphoyd websocketpp 和 wss (TLS) 客户端示例

c# - 如何查询 Sharepoint 列表中每个值的最大 ID?

javascript - 为什么 PHP strlen() 和 Javascript xxx.length 不相等?

angular - 通过安全 Websockets 的 MQTT 套接字一分钟后关闭 - RabbitMQ

javascript - 生成子 Node 进程并将其通过管道传输到当前 Node 进程有什么用?

websocket - 如何检测用户是否因网络断开而离开 Phoenix channel ?

web-services - 使用 WebRequest PUT 将文件上传到 SharePoint WSS 3.0

javascript - 在 JavaScript 中验证 HTML 实体

javascript - 在格式化浮点值时,JavaScript 如何确定要生成的位数?