La création d'un “Hello World” WebSocket exemple
Je ne comprends pas pourquoi je ne peux pas faire le code suivant travail. Je veux me connecter avec JavaScript pour ma console du serveur d'application. Et puis envoyer les données au serveur.
Voici le code du serveur:
static void Main(string[] args)
{
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 9998);
server.Start();
var client = server.AcceptTcpClient();
var stream = client.GetStream();
while (true)
{
var buffer = new byte[1024];
//wait for data to be received
var bytesRead = stream.Read(buffer, 0, buffer.Length);
var r = System.Text.Encoding.UTF8.GetString(buffer);
//write received data to the console
Console.WriteLine(r.Substring(0, bytesRead));
}
}
et voici le JavaScript:
var ws = new WebSocket("ws://localhost:9998/service");
ws.onopen = function () {
ws.send("Hello World"); //I WANT TO SEND THIS MESSAGE TO THE SERVER!!!!!!!!
};
ws.onmessage = function (evt) {
var received_msg = evt.data;
alert("Message is received...");
};
ws.onclose = function () {
//websocket is closed.
alert("Connection is closed...");
};
Lorsque j'exécute ce code c'est ce qui se passe:
Noter que lorsque j'exécute le code JavaScript, le serveur accepte et réussi à établir une connexion. Le JavaScript n'est pas en mesure d'envoyer des données à travers. Chaque fois que je place la méthode send il ne sera pas envoyé, même si une connexion est établie. Comment puis-je faire ce travail?
- Cette "question" ne semble pas être une question plus longtemps, et donc n'est pas vraiment adapté à StackOverflow du format. FWIW, le message n'est pas chiffré, il est masqué (crypté) par XOR avec l'encontre d'une valeur aléatoire est transmis comme une partie de l'image. Ce protocole détail existe pour éviter l'empoisonnement des attaques contre des serveurs proxy qui pourrait ne pas comprendre le trafic.
- merci, cette réponse est très utile 🙂 hey, juste une chose, est-ce "static private string guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";" chose est toujours constant? si non, où puis-je obtenir ces valeurs?
- j'ai obtenu ceci: "Un serveur ne doit pas masquer les images qu'il envoie au client"
- Vous devriez probablement avoir quitté la question d'origine intact. Le but de ces questions est de présenter le problème, pas la solution. Les réponses, comme vous avez pu le deviner, sont pour les solutions.
- Pourquoi le WebSocket url se termine par "/service " (ws://localhost:8080/service)? Pourquoi ne pas simplement 'ws://localhost:8080'?
- J'ai eu le même message. Avez-vous résoudre ce problème?
- vous pouvez également l'utiliser sans le "service". Testé par moi-même.
- Aucun ne fonctionne pour moi avec IE ni avec FF
- S'il vous plaît ne pas se métamorphoser questions en réponses - cette sorte de chose constitue un non-trivial de flux de travaux créés par des éditeurs bénévoles. Dès que vous avez des éléments de réponse à tout, le mettre dans une réponse, et de l'y maintenir. Merci.
Vous devez vous connecter pour publier un commentaire.
WebSockets est un protocole qui s'appuie sur TCP streaming connexion. Bien que les WebSockets Message est basée sur le protocole.
Si vous souhaitez mettre en place votre propre protocole, alors je vous recommande d'utiliser les dernières stable et cahier des charges (pour 18/04/12) RFC 6455.
Cette spécification contient toutes les informations nécessaires sur la poignée de main et le cadrage. Ainsi plus de description sur les scénarios de comportement de votre navigateur ainsi que du côté serveur.
Il est fortement recommandé de suivre les recommandations raconte relatives à côté serveur lors de la mise en œuvre de votre code.
En quelques mots, je dirais que le travail avec les WebSockets comme ceci:
Créer un serveur de Socket (Système d'.Net.Les Sockets) le lier à un port spécifique, et restez à l'écoute avec asynchrone d'accepter des connexions. Quelque chose comme ça:
Vous devriez avoir accepter fonction "OnAccept" qui permettra de mettre en œuvre poignée de main. Dans l'avenir, il doit être dans un autre thread si le système est conçu pour traiter la quantité énorme de connexions par seconde.
Une fois la connexion établie, vous avez à faire poignée de main. Basé sur les spécifications 1.3 Ouverture De La Poignée De Main, une fois la connexion établie, vous recevrez de base de la requête HTTP avec quelques informations. Exemple:
Cet exemple est basé sur la version du protocole 13. Gardez à l'esprit que les anciennes versions ont quelques différences, mais surtout les versions les plus récentes sont de la croix-compatible. Les différents navigateurs peuvent vous envoyer des informations supplémentaires. Par exemple le Navigateur et l'OS de détails, le cache et les autres.
Basé sur la poignée de main de détails, vous devez générer des lignes de réponse, ils sont pour la plupart même, mais contiendra Accpet-Clé, qui est basée sur la condition de la Sec-WebSocket-Clé. Dans la spécification 1.3 il est décrit clairement comment générer une réponse clé.
Voici ma fonction que j'ai utilisé pour V13:
Poignée de main de réponse ressemble à ça:
Mais accepter clés doivent être générées, l'un basé sur des clés du client et de la méthode AcceptKey j'ai fourni avant. Ainsi, assurez-vous après le dernier caractère de la touche accept vous mettez deux nouvelles lignes "\r\n\r\n".
Voici le copier-coller à partir de ma propre mise en œuvre. Il n'est pas prêt-à-utiliser le code, et à être modifié, que j'ai écris juste pour vous donner une idée, et de l'ensemble de la logique de lecture/écriture avec WebSocket cadrage. Aller à ce lien.
La mise en œuvre propre WebSockets protocole certainement avoir des avantages et une grande expérience, vous obtenez ainsi que le contrôle de protocole lui-même. Mais vous devez passer un peu de temps à le faire, et assurez-vous que la mise en œuvre est très fiable.
En même temps que vous pourriez avoir un coup d'oeil en prêt-à-utiliser des solutions de google (encore une fois) avoir assez.
(Posté répondre au nom de l'OP).
Je suis capable d'envoyer des données maintenant. C'est ma nouvelle version du programme grâce à vos réponses et le code de @Maksims Mihejevs.
Serveur
JavaScript:
Lorsque j'exécute ce code, je suis en mesure d'envoyer et de recevoir des données provenant à la fois le client et le serveur. Le seul problème, c'est que les messages sont cryptés lorsqu'ils arrivent sur le serveur. Voici les étapes de la façon dont le programme fonctionne:
Notez comment le message du client sont cryptées.
Les WebSockets sont mis en œuvre avec un protocole qui implique poignée de main entre le client et le serveur. Je n'imagine pas qu'ils fonctionnent très bien comme d'habitude les sockets. Lire sur le protocole, et faites parvenir votre demande d'en parler. Vous pouvez également utiliser un existant WebSocket bibliothèque, ou .Net4.5beta qui a un API WebSocket.
Question
Puisque vous êtes à l'aide de WebSocket, spender est correct. Après avoir reçu les données initiales de la WebSocket, vous devez envoyer le handshake message du C# serveur avant tout complément d'information peut circuler.
Quelque chose le long de ces lignes.
Vous pouvez faire plus de recherches sur la façon dont WebSocket fonctionne sur w3 ou google.
Des liens et des Ressources
Ici est un protocole caractéristiques: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76#section-1.3
Liste d'exemples:
Je ne pourrais pas trouver un simple exemple de travail n'importe où (à compter du 19 janvier), voici donc une version mise à jour. J'ai la version chrome 71.0.3578.98.
C# serveur Websocket :
Client html et javascript:
HTML:
Vous pouvez essayer ces exemples simples...
C# Serveur WebSocket
C# Client WebSocket