4

我正在尝试使用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) 连接到服务器时,我收到一条消息

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

这同时出现在我的终端 图片

根据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;

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

4

3 回答 3

4

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

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

var socket = new WebSocket('ws://127.0.0.1:8081/laputa');
于 2017-07-20T16:10:06.873 回答
1

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

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

于 2016-09-04T22:29:59.347 回答
0

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

    }
}
于 2020-07-17T17:03:47.440 回答