Я написал простой WebSocketServer, который я узнал на веб-сайте MSDN. Но это не сработает. Можете ли вы объяснить мне, как мне следует запускать этот простой проект, потому что я его запускаю, но ничего не произошло.WebSocketServer MSDN Пример
Сервер
namespace WebSocketServer
{
class Program
{
static void Main(string[] args)
{
var task1 = Run();
// Console.ReadLine();
}
public static async Task Run()
{
HttpListener s = new HttpListener();
s.Prefixes.Add("http://localhost:8000/ws");
s.Start();
var hc = await s.GetContextAsync();
if (!hc.Request.IsWebSocketRequest)
{
hc.Response.StatusCode = 400;
hc.Response.Close();
return;
}
var wsc = await hc.AcceptWebSocketAsync(null);
var ws = wsc.WebSocket;
for (int i = 0; i != 10; ++i)
{
// await Task.Delay(20);
var time = DateTime.Now.ToLongTimeString();
var buffer = Encoding.UTF8.GetBytes(time);
var segment = new ArraySegment<byte>(buffer);
await ws.SendAsync(segment, System.Net.WebSockets.WebSocketMessageType.Text, true, CancellationToken.None);
}
await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Done", CancellationToken.None);
}
}
}
Клиент
namespace WebSocketClient
{
class Program
{
static void Main(string[] args)
{
var clientTask1 = Client();
Console.ReadLine();
}
static async Task Client()
{
ClientWebSocket ws = new ClientWebSocket();
var uri = new Uri("ws://localhost:8000/ws/");
await ws.ConnectAsync(uri, CancellationToken.None);
var buffer = new byte[1024];
while (true)
{
var segment = new ArraySegment<byte>(buffer);
var result = await ws.ReceiveAsync(segment, CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
{
await ws.CloseAsync(WebSocketCloseStatus.InvalidMessageType, "I don't do binary", CancellationToken.None);
return;
}
int count = result.Count;
while (!result.EndOfMessage)
{
if (count >= buffer.Length)
{
await ws.CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "That's too long", CancellationToken.None);
return;
}
segment = new ArraySegment<byte>(buffer, count, buffer.Length - count);
result = await ws.ReceiveAsync(segment, CancellationToken.None);
count += result.Count;
}
var message = Encoding.UTF8.GetString(buffer, 0, count);
Console.WriteLine(">" + message);
}
}
}
}
И мне нужно, чтобы создать простой веб-сайт, который будет принимать некоторые данные (например Time) от WebSocketServer и показать его на этой странице. Я написал код, но ничего не происходит
<html>
<body>
<script type ="text/javascript">
var ws = new WebSocket("ws://localhost:8000/ws/");
ws.onmessage = function (args)
{
var time = args.data;
};
</script>
</body>
</html>
В какой операционной системе вы используете? (HTTP.SYS, требуемый для веб-сокетов, - это win-8 вверх и похожие серверные версии) И: вы работаете как admin? (обратите внимание: вам не нужно запускать такой сервер, как администратор, но это быстрый способ проверить, что это не проблема ACL доступа к портам, так как учетная запись администратора автоматически имеет доступ) –
Я использую 7 (((Могу ли я использовать WebSockets в Windows 7? –
да, вы можете - это просто TCP, однако, не используя реализацию MS, к сожалению: «Однако единственные публичные реализации клиентских и серверных WebSockets поддерживаются в Windows 8 и Windows Server 2012. « –