C# en tant que serveur Websocket pour HTML5 connexion websocket
Je suppose que c'est déjà le temps que je demande à d'autres. Est-il possible de créer un serveur websocket à l'aide de C# et de la demande de serveur de HTML5 codes?
Je suis actuellement en utilisant le Système de package de websocket. J'ai un code que j'ai téléchargé sur internet et c'est ici:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebSocketChatServer
{
using WebSocketServer;
class ChatServer
{
WebSocketServer wss;
List<User> Users = new List<User>();
string unknownName = "john doe";
public ChatServer()
{
//wss = new WebSocketServer(8181, "http://localhost:8080", "ws://localhost:8181/chat");
wss = new WebSocketServer(8080, "http://localhost:8080", "ws://localhost:8080/dotnet/Chats");
wss.Logger = Console.Out;
wss.LogLevel = ServerLogLevel.Subtle;
wss.ClientConnected += new ClientConnectedEventHandler(OnClientConnected);
wss.Start();
KeepAlive();
}
private void KeepAlive()
{
string r = Console.ReadLine();
while (r != "quit")
{
if(r == "users")
{
Console.WriteLine(Users.Count);
}
r = Console.ReadLine();
}
}
void OnClientConnected(WebSocketConnection sender, EventArgs e)
{
Console.WriteLine("test");
Users.Add(new User() { Connection = sender });
sender.Disconnected += new WebSocketDisconnectedEventHandler(OnClientDisconnected);
sender.DataReceived += new DataReceivedEventHandler(OnClientMessage);
}
void OnClientMessage(WebSocketConnection sender, DataReceivedEventArgs e)
{
Console.WriteLine(sender);
User user = Users.Single(a => a.Connection == sender);
if (e.Data.Contains("/nick"))
{
string[] tmpArray = e.Data.Split(new char[] { ' ' });
if (tmpArray.Length > 1)
{
string myNewName = tmpArray[1];
while (Users.Where(a => a.Name == myNewName).Count() != 0)
{
myNewName += "_";
}
if (user.Name != null)
wss.SendToAll("server: '" + user.Name + "' changed name to '" + myNewName + "'");
else
sender.Send("you are now know as '" + myNewName + "'");
user.Name = myNewName;
}
}
else
{
string name = (user.Name == null) ? unknownName : user.Name;
wss.SendToAllExceptOne(name + ": " + e.Data, sender);
sender.Send("me: " + e.Data);
}
}
void OnClientDisconnected(WebSocketConnection sender, EventArgs e)
{
try
{
User user = Users.Single(a => a.Connection == sender);
string name = (user.Name == null) ? unknownName : user.Name;
wss.SendToAll("server: "+name + " disconnected");
Users.Remove(user);
}
catch (Exception exc)
{
Console.WriteLine("ehm...");
}
}
}
}
Et j'ai ce code côté client:
<!HTML>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script language="javascript" type="text/javascript">
jQuery(document).ready(function(){
var socket = new WebSocket("ws://localhost:8080");
socket.onopen = function(){
alert("Socket has been opened!");
}
});
</script>
</head>
</HTML>
Que je lance ma console C# app et de charger la page du client, l'application me dit qu'il y a quelqu'un qui s'est connecté dans le port, il est à l'écoute. Mais de mon côté client, comme je regarde dans firebug de la console, il me donne le débutant classique de l'erreur:
Firefox can't establish a connection to the server at ws://localhost:8080/
Ce que je souhaite réaliser est d'établir d'abord un succès de la connexion websocket et pousser la valeur de mon client à venir à partir de mon serveur.
Que j'ai considéré comme l'Alchimie, mais la version que j'ai est Visual Studio express 2010, la version gratuite, et il est dit que "la solution de dossiers ne sont pas pris en charge dans cette version de l'application".
Toute aide sera très appréciée.
OriginalL'auteur Charmie | 2013-03-13
Vous devez vous connecter pour publier un commentaire.
J'ai été le développement d'un serveur pour un JavaScript/HTML 5 de jeu pendant environ 7 mois maintenant, avez-vous regardé dans l'Alchimie Websockets? son très facile à utiliser.
Exemple:
Comme vous pouvez le voir c'est assez facile de travailler avec et je trouve leur documentation très bonne (note ClientPeer est une classe personnalisée à moi, juste de l'utiliser comme un exemple).
OriginalL'auteur Michael Loriault
Ce que vous essayez d'atteindre sera beaucoup plus facile si vous prenez un coup d'oeil à ASP.NET SignalR
Il a le soutien de haut niveau pour les moyeux à mettre en œuvre en temps réel de la communication et dispose également d'une connexion permanente à faible niveau de classe à avoir très finement contrôle plus précis de la communication.
Prise en charge de plusieurs types de clients et de secours si les websockets n'est pas pris en charge aux deux extrémités de la communication (en option, il peut utiliser le temps d'interrogation ou jamais de cadres).
Regardez stackoverflow.com/questions/11140164/... - SignalR est independend de ASP.Net et travaille avec les WebSockets.
SignalR est une partie de asp.net .. il n'est pas indépendant. suivez ce lien asp.net/signalr
Regardez, par exemple, à la BasicChat.SelfHost exemple - pas de ASP.Net de référence. github.com/SignalR/Samples/tree/master/BasicChat.SelfHost
OriginalL'auteur scartag
La raison de cette erreur est ( probablement ) parce que vous ne répondez pas à la poignée de main. Une fois la connexion établie, le navigateur envoie des données et le serveur doit répondre de manière appropriée ( sinon, le navigateur va fermer la connexion ). Vous pouvez en lire plus à ce sujet sur wiki ou directement dans spécification.
OriginalL'auteur freakish
J'ai modifié un code que j'ai téléchargé en ligne et voici ce que j'ai maintenant:
Problème de connexion résolu, la prochaine serait d'ENVOYER des DONNÉES au client.
OriginalL'auteur Charmie
il suffit de changer shakehands dans WebSocketServer.cs fichier dans la solution avec le code ci-dessous et votre erreur a disparu..
OriginalL'auteur amitP
Vous pouvez aussi jeter un oeil à la WebSocketRPC bibliothèque qui devrait être assez simple à utiliser, pour la "première" de connexion et les connexions RPC (les messages peuvent également être mélangés).
Suivantes peuvent être utiles à vous:
Le code responsable pour envoyer/recevoir des messages est situé dans le La classe de connexion.
Dans le référentiel, vous pouvez également y trouver un la base de JavaScript client est mis en œuvre.
Disclaimer: je suis l'auteur.
OriginalL'auteur dajuric