簡體   English   中英

C#Websocket服務器未從HTML5客戶端接收消息

[英]C# Websocket server not receiving messages from HTML5 client

我正在嘗試創建一個簡單的websocket聊天室服務器。 我的客戶端能夠連接到服務器,但是即使服務器處於偵聽狀態,也無法將消息發送到服務器。

當客戶端連接時,一堆看起來像標題信息的東西將被寫入控制台。 但是,當用Javascript執行WebSocket.send()時,服務器端不會發生任何事情。

HTML:

<button id="closeSocket">disconnect</button><br />
<input id = "inputField" /><button id="sendMessage">send</button>
<div id = "output"></div>

<script type = 'text/javascript' src = 'websockets.js'></script>

Javascript:

websocket = new WebSocket("ws://127.0.0.1:80");

document.getElementById("closeSocket").onclick = closeSocket;
document.getElementById("sendMessage").onclick = sendMessage;

websocket.onopen = function(){
  output("connected");
}

function sendMessage(){
    output("sent: " + document.getElementById('inputField').value);
  websocket.send(document.getElementById('inputField').value);
}

websocket.onmessage = function(e){
  output("got response: " + e.data);
}

function closeSocket(){
    websocket.close();
}

websocket.onclose = function(){
    output("disconnected");
}

function output(t){
    document.getElementById("output").innerHTML += t + "<br />";
}

C#服務器:

using System;
using System.Net;
using System.Net.Sockets;

namespace WebSocketsTutorial {
    class Program {
        static void Main(string[] args) {
            TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);
            TcpClient client = default(TcpClient);

            server.Start();
            Console.WriteLine("server started");

            while (true) {
                client = server.AcceptTcpClient();

                byte[] receivedBuffer = new byte[100];
                NetworkStream stream = client.GetStream();

                stream.Read(receivedBuffer, 0, receivedBuffer.Length);

                foreach (byte b in receivedBuffer) {
                    Console.Write(Convert.ToChar(b).ToString());
                }
            }
        }
    }
}

這是客戶端連接時控制台上輸出的內容:

在此處輸入圖片說明

我主要要做的是允許任意數量的連接,並最終讓服務器向所有連接的客戶端回顯用戶的提交。

首先,WebSocket不僅僅是普通的套接字。 它使用HTTP和您需要使用的自己的框架協議定義連接握手。

https://zh.wikipedia.org/wiki/WebSocket

https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_servers

https://hpbn.co/websocket/

其次,您僅讀取請求的前100個字節。 您應該讀取,直到Read操作返回0。

您可以使用許多組件來創建WebSocket服務器,包括默認的組件: https : //docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM