是否有一个WebSocket客户实施的。净?[关闭]
题
我想利用web sockets在我的窗户表格或WPF的应用程序。是有一个.净的控制即支持web sockets实现了吗?或是那里的任何开放源码项目开始呢?
一个开放源码解决方案Java客户支持web sockets也可以帮助我。
解决方案
现在,SuperWebSocket还包括WebSocket客户执行情况 SuperWebSocket项目的主页
其他。净客户实现包括:
其他提示
下面是在该移植Java代码C#快速第一遍。不支持SSL模式,并且只被极轻测试,但它是一个开始。
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class WebSocket
{
private Uri mUrl;
private TcpClient mClient;
private NetworkStream mStream;
private bool mHandshakeComplete;
private Dictionary<string, string> mHeaders;
public WebSocket(Uri url)
{
mUrl = url;
string protocol = mUrl.Scheme;
if (!protocol.Equals("ws") && !protocol.Equals("wss"))
throw new ArgumentException("Unsupported protocol: " + protocol);
}
public void SetHeaders(Dictionary<string, string> headers)
{
mHeaders = headers;
}
public void Connect()
{
string host = mUrl.DnsSafeHost;
string path = mUrl.PathAndQuery;
string origin = "http://" + host;
mClient = CreateSocket(mUrl);
mStream = mClient.GetStream();
int port = ((IPEndPoint)mClient.Client.RemoteEndPoint).Port;
if (port != 80)
host = host + ":" + port;
StringBuilder extraHeaders = new StringBuilder();
if (mHeaders != null)
{
foreach (KeyValuePair<string, string> header in mHeaders)
extraHeaders.Append(header.Key + ": " + header.Value + "\r\n");
}
string request = "GET " + path + " HTTP/1.1\r\n" +
"Upgrade: WebSocket\r\n" +
"Connection: Upgrade\r\n" +
"Host: " + host + "\r\n" +
"Origin: " + origin + "\r\n" +
extraHeaders.ToString() + "\r\n";
byte[] sendBuffer = Encoding.UTF8.GetBytes(request);
mStream.Write(sendBuffer, 0, sendBuffer.Length);
StreamReader reader = new StreamReader(mStream);
{
string header = reader.ReadLine();
if (!header.Equals("HTTP/1.1 101 Web Socket Protocol Handshake"))
throw new IOException("Invalid handshake response");
header = reader.ReadLine();
if (!header.Equals("Upgrade: WebSocket"))
throw new IOException("Invalid handshake response");
header = reader.ReadLine();
if (!header.Equals("Connection: Upgrade"))
throw new IOException("Invalid handshake response");
}
mHandshakeComplete = true;
}
public void Send(string str)
{
if (!mHandshakeComplete)
throw new InvalidOperationException("Handshake not complete");
byte[] sendBuffer = Encoding.UTF8.GetBytes(str);
mStream.WriteByte(0x00);
mStream.Write(sendBuffer, 0, sendBuffer.Length);
mStream.WriteByte(0xff);
mStream.Flush();
}
public string Recv()
{
if (!mHandshakeComplete)
throw new InvalidOperationException("Handshake not complete");
StringBuilder recvBuffer = new StringBuilder();
BinaryReader reader = new BinaryReader(mStream);
byte b = reader.ReadByte();
if ((b & 0x80) == 0x80)
{
// Skip data frame
int len = 0;
do
{
b = (byte)(reader.ReadByte() & 0x7f);
len += b * 128;
} while ((b & 0x80) != 0x80);
for (int i = 0; i < len; i++)
reader.ReadByte();
}
while (true)
{
b = reader.ReadByte();
if (b == 0xff)
break;
recvBuffer.Append(b);
}
return recvBuffer.ToString();
}
public void Close()
{
mStream.Dispose();
mClient.Close();
mStream = null;
mClient = null;
}
private static TcpClient CreateSocket(Uri url)
{
string scheme = url.Scheme;
string host = url.DnsSafeHost;
int port = url.Port;
if (port <= 0)
{
if (scheme.Equals("wss"))
port = 443;
else if (scheme.Equals("ws"))
port = 80;
else
throw new ArgumentException("Unsupported scheme");
}
if (scheme.Equals("wss"))
throw new NotImplementedException("SSL support not implemented yet");
else
return new TcpClient(host, port);
}
}
有关的WebSockets支持是进来.NET 4.5 。链接还包含使用系统的例子。 Net.WebSockets.WebSocket 类。
Kaazing.com提供可以访问的WebSockets .NET客户端库。他们有教程在网上清单:构建的Microsoft .NET JMS客户端和清单:构建的Microsoft .NET AMQP客户
有一个爪哇的WebSocket在github客户项目。
有一个客户机实现: http://websocket4net.codeplex.com/
另一种选择: XSockets.Net 时,具有实现服务器和客户端
可以通过安装服务器:
PM> Install-Package XSockets
或通过安装客户端:
PM> Install-Package XSockets.Client
当前版本是:3.0.4
这是一个非常简单的协议。有一个Java实现这里不应该太难以转化为C#。如果我找时间做这件事,我会在这里张贴了......
最近的互操作性桥梁和实验室中心发布一个原型实现(在托管代码)的网页套接字协议规范的两个草案的:
草案-hixie-thewebsocketprotocol-75 和草案-hixie-thewebsocketprotocol-76
在原型可以在HTML5实验室中找到。我把这篇博客文章的所有,我发现这将如何使用WCF来完成信息(直到现在)和代码片段。
如果你想要的东西多一点轻量级的,检查出我和一个朋友发布了一个C#服务器:的 https://github.com/Olivine-Labs/Alchemy-Websockets
支持香草的WebSockets以及闪光灯的WebSockets。它是专为我们的重点是可扩展性和效率的网络游戏。
还有炼金。 http://olivinelabs.com/Alchemy-Websockets/ 这是相当凉爽。