ベアボーンWebSocketチャットルームサーバーを作成しようとしています。クライアントはサーバーに接続できますが、サーバーがリスニング状態になっていてもサーバーにメッセージを送信することはできません。C#WebSocketサーバーがHTML5クライアントからのメッセージを受信していません
クライアントが接続すると、ヘッダ情報のようなものがコンソールに書き込まれます。しかし、WebSocket.send()がJavascriptで実行されると、サーバ側で何も起こりません。
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());
}
}
}
}
}
これは、クライアントが接続したときに、コンソールに出力されているものです:
私が主にしているのは、任意の数の接続を許可し、最終的にサーバーが接続されたすべてのクライアントにユーザーの送信を返すようにすることです。
:
Read
操作は0デフォルト1を含め、WebSocketのサーバーを作成するために使用できるコンポーネントの無数がありますを返すまでは読むべき?私は無限ループでそれを持っているので、100バイトの入力を永久に読み取ると思った。私はクライアントがサーバーにメッセージを送信できない理由を説明していません –
しかし、ループではあなたは新しいクライアントを受け入れています – vtortola
ああ、何も変わっていません。私はクライアント= server.AcceptTcpClient()を移動しました。 whileループの上にあり、ループが無限に走ってコンソールウィンドウからすべてがスクロールされるようにしていました。 –