WebSocketSharp 未找到具有指定路径的 WebSocket 服务

Posted

技术标签:

【中文标题】WebSocketSharp 未找到具有指定路径的 WebSocket 服务【英文标题】:WebSocketSharp A WebSocket service with the specified path isn't found 【发布时间】:2016-08-16 16:53:21 【问题描述】:

我正在尝试使用websocket-sharp 创建一个简单的 C# websocket 服务器 我按照官方指南进行操作,但得到了一些奇怪的回复。

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) 连接到服务器时,我收到了一条消息

与“ws://127.0.0.1:8181/”的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:501

这同时出现在我的终端上

根据HTTP Protocol,代码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;

谁能告诉我我的错误在哪里?

【问题讨论】:

你试过 url ws://127.0.0.1:8181(不带斜线)吗? 没用.... 【参考方案1】:

我认为问题在于您没有向服务器添加行为。我做了这里文档中提到的“laputa”事情:https://github.com/sta/websocket-sharp。

不要忘记连接到正确的端点。在示例中,端点是“/laputa”,因此您必须在您的 javascript 中连接,例如:

var socket = new WebSocket('ws://127.0.0.1:8081/laputa');

【讨论】:

我有同样的问题,但我创建了一个类 ServerSocket : WebSocketBehavior,并创建了一个重写方法 OnOpen OnError OnClose 和 OnMessage。是否必须使它像您发送的 gh 样品中的一样?我的意思是,我输入了像ws.OnClose += (sender, e) =&gt; ... ; 这样的事件吗?【参考方案2】:

您需要添加一个继承自 WebSocketBehavior 的类,我不确定没有它该库能否正常工作。

但该示例对我不起作用,我必须在 添加行为之前调用 server.Start()。

【讨论】:

【参考方案3】:

我认为这会有所帮助,因为问题的核心是关于如何设置 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();
        

    

【讨论】:

以上是关于WebSocketSharp 未找到具有指定路径的 WebSocket 服务的主要内容,如果未能解决你的问题,请参考以下文章

未指定 authenticationScheme,并且没有找到具有默认身份验证和自定义授权的 DefaultChallengeScheme

Angular 7:“找不到具有未指定名称属性的控件”

Xamarin Android 问题通过 HTTPS 连接到具有自签名证书的站点:“未找到证书路径的信任锚。”

未找到具有提供的路径的文件:build.不会上传任何工件。 - 将 React App 部署到 Firebase 的 Github Action

VB编译运行后出现“运行时错误“76” 未找到路径” 。为啥?

指定位置未找到 Flutter SDK