WebSocketSharp Служба WebSocket с указанным путем не найдена

Я пытаюсь создать простой сервер веб-сокетов С# с помощью websocket-sharp, и я следовал официальному руководство, но вместо этого я получил какой-то странный ответ.

Фрагмент C#

using System;
using WebSocketSharp.Server;

namespace WebSocketSharp
{
class MainClass
{
    public static void Main(string[] args)
    {
        startServer();
    }

    public static void startServer()
    {
        var ws = new WebSocketServer(System.Net.IPAddress.Any, 8181);
        ws.Start();
        Console.WriteLine("Server started");
        Console.ReadKey(true);
        ws.Stop();
        Console.WriteLine("Server stopped");
    }
}
}

Когда я попытался подключить свой клиент (HTML) к серверу, я получил сообщение

Ошибка подключения WebSocket к «ws://127.0.0.1:8181/»: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 501

и это появилось на моем терминале в то же время image

Согласно протоколу HTTP, код 501 означает

Сервер не поддерживает функции, необходимые для выполнения запроса. Это подходящий ответ, когда сервер не распознает метод запроса и не может поддерживать его для любого ресурса.

Это мой клиентский код, и я считаю, что он соответствует методу запроса.

<!doctype html>
<head>

</head>
<body>
  <form>
    <input id="textField1" type="text" style="margin: 0 5px; width: 200px; height: 40px;" placeholder="Enter data">
    <button id="sendTextField1" type="button" class="btn btn-info">Send</button>
  </form>
  <script type="text/javascript">
    var start = function () {
    var wsImpl = window.WebSocket || window.MozWebSocket;
    window.ws = new wsImpl('ws://127.0.0.1:8181/');

    ws.onmessage = function (evt) {
      console.log(evt.data);
    };
    ws.onopen = function () {
      console.log("Connected");
    };
    ws.onclose = function () {
      console.log("Closed");
    };

    document.getElementById("sendTextField1").onclick = function() {
      sendToSocket(document.getElementById('textField1').value);
    };

    function sendToSocket(value){
      console.log("Sending value to socket " + value + " ");
      ws.send(value);
    };
}
window.onload = start;

Может ли кто-нибудь сказать мне, где моя ошибка?


person J.Doe    schedule 16.08.2016    source источник
comment
Вы пробовали URL-адрес ws://127.0.0.1:8181 (без косой черты)?   -  person vtortola    schedule 18.08.2016
comment
Это не помогает....   -  person J.Doe    schedule 18.08.2016


Ответы (3)


Я думаю, проблема в том, что вы не добавляете поведение на сервер. Я сделал "лапуту", упомянутую в документации здесь: https://github.com/sta/websocket-sharp.

Не забудьте подключиться к правильной конечной точке. В примере конечной точкой является «/ laputa», поэтому вам нужно подключиться к вашему javascript, например:

var socket = new WebSocket('ws://127.0.0.1:8081/laputa');
person Jaap Weijland    schedule 20.07.2017
comment
У меня такая же проблема, но я создал класс ServerSocket: WebSocketBehavior и сделал переопределенные методы OnOpen, OnError, OnClose и OnMessage. обязательно ли делать так, как в образце из gh, который вы прислали? я имею в виду, набираю ли я такие события, как ws.OnClose += (sender, e) => { ... };? - person Kamil; 29.04.2019

Вам нужно добавить класс, унаследованный от WebSocketBehavior, я не уверен библиотека будет работать и без него.

Однако у меня этот пример не сработал, мне пришлось вызвать server.Start() перед добавлением поведения.

person Atchitutchuk    schedule 04.09.2016

Я подумал, что это будет полезно, поскольку основной вопрос заключается в том, как настроить сервер WebSocket и провести базовый обмен с клиентом. Этот минимальный код создает как локальный сервер, так и клиент, которые выполняют примитивный обмен с целью демонстрации базовой связи между ними:

using System;
using WebSocketSharp;
using WebSocketSharp.Server;

namespace ConsoleApp1
{
    public class ConsoleApplication
    {
        public class ServerService : WebSocketBehavior
        {
            protected override void OnMessage(MessageEventArgs e)
            {
                Console.WriteLine("I, the server, received: " + e.Data);

                Send("I, the server, send you this!");
            }
        }

        public static void Main(string[] args)
        {
            // Server

            var wssv = new WebSocketServer(1236);
            wssv.AddWebSocketService<ServerService>("/service");
            wssv.Start();

            Console.WriteLine("Server is setup.");
            Console.ReadLine();

            // Client

            var ws = new WebSocket("ws://127.0.0.1:1236/service");

            ws.OnMessage += (sender, e) => Console.WriteLine("I, the client, received: " + e.Data);

            ws.Connect();

            Console.WriteLine("Client is setup.");
            Console.ReadLine();

            // The client sends a message to the server:

            ws.Send("Server, please send me something!");

            Console.ReadLine();
        }

    }
}
person Philipp Elhaus    schedule 17.07.2020