Ich teste gerade einige grundlegende Websocket Beispiele, die mir nicht vollständig mit den Grundlagen helfen. Ich verstehe, wie Sie mit C# einen Listener auf dem Server erstellen und die Anfrage als Web-Socket aktualisieren. Ich brauche Hilfe beim Abrufen einer Zeichenfolge, die von Javascript an den Server gesendet wird.C# websocket Server erhalten Text von Javascript
C# Code:
class Program
{
private static void ThreadProc(object obj)
{
var client = (TcpClient)obj;
var address = client.Client.RemoteEndPoint.ToString().Split(':');
Console.WriteLine(String.Format("A client is connected from {0}", address[0]));
NetworkStream stream = client.GetStream();
//enter to an infinite cycle to be able to handle every change in stream
while (true)
{
while (!stream.DataAvailable) ;
Byte[] bytes = new Byte[client.Available];
stream.Read(bytes, 0, bytes.Length);
//translate bytes of request to string
String data = Encoding.UTF8.GetString(bytes);
if (new Regex("^GET").IsMatch(data))
{
Byte[] response = Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" + Environment.NewLine
+ "Connection: Upgrade" + Environment.NewLine
+ "Upgrade: websocket" + Environment.NewLine
+ "Sec-WebSocket-Accept: " + Convert.ToBase64String(
SHA1.Create().ComputeHash(
Encoding.UTF8.GetBytes(
new Regex("Sec-WebSocket-Key: (.*)").Match(data).Groups[1].Value.Trim() + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
)
)
) + Environment.NewLine
+ Environment.NewLine);
stream.Write(response, 0, response.Length);
}
else
{
Console.WriteLine(data);
}
}
}
static void Main(string[] args)
{
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);
server.Start();
Console.WriteLine("Server has started on 127.0.0.1:80.{0}Waiting for a connection...", Environment.NewLine);
while (true)
{
var clientConnection = server.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(ThreadProc, clientConnection);
}
}
}
Javascript zu websocket verbinden.
var host = window.location.origin.replace("http", "ws");
var socket = new WebSocket("ws://127.0.0.1:80");
socket.onopen = function (openEvent) {
console.log("Socket connection is open.");
sendTextMessage();
};
function sendTextMessage() {
if (socket.readyState != WebSocket.OPEN)
{
console.log("Socket is not open for connection.");
return;
}
socket.send("MDN");
}
aktualisieren kann ich die Meldung in jetzt kommen sehen. Allerdings bekomme ich die Zeichenfolge MDN nicht, ich bekomme einige funky Charaktere zurück. Mein C# -Code wurde aktualisiert, um Änderungen anzuzeigen.
Ich versuche nur eine Zeichenfolge von meinem Javascript in meinen Server zu senden und diese Zeichenfolge auf der Konsole zu lesen. Wenn jemand noch mehr erklären kann, wie mehrere Webbrowser gleichzeitig verbunden sind, wäre das großartig. Auch wenn mich jemand auf den Versand von Nachrichten an alle angeschlossenen Webbrowser hinweisen kann, tun Sie dies bitte.
Wenn dies ein Duplikat ist, weisen Sie mich bitte in die richtige Richtung.
Ich hatte das gleiche Problem und die Funktion DecodeMessage von diesem Beitrag hat mir geholfen: http://StackOverflow.com/Questions/34372639/Sending-A-Message-Back-ToClient-Use-Tcplistener-Server/34372944 –
Eigentlich hatte ich eine Menge Probleme mit diesem Code und nach der Recherche nutze ich jetzt SignalR, dieses Beispiel hilft mir sehr: https://code.msdn.microsoft.com/windowsdesktop/Using-SignalR-in-WinForms- f1ec847b –