it-swarm.com.de

Gibt es einen für .NET implementierten WebSocket-Client?

Ich möchte WebSockets in meinen Windows Forms- oder WPF-Anwendungen verwenden. Gibt es eine .NET-Steuerung, die WebSockets bereits unterstützt? Oder gibt es ein Open Source-Projekt darüber?

Eine Open Source-Lösung für einen Java-Client, der WebSockets unterstützt, könnte mir ebenfalls helfen.

50
Jonas

Jetzt enthält SuperWebSocket auch eine WebSocket-Clientimplementierung SuperWebSocket Project Homepage

Andere .NET-Client-Implementierungen umfassen:

20
Kerry Jiang

Hier ist ein kurzer erster Durchlauf beim Portieren des Java-Codes nach C #. Unterstützt nicht den SSL-Modus und wurde nur sehr wenig getestet, aber es ist ein Anfang.

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);
    }
}
24
jhurliman

Unterstützung für WebSockets ist kommt in .NET 4.5 . Diese Links enthalten auch ein Beispiel für die Verwendung der Klasse System.Net.WebSockets.WebSocket .

11
Stephen Rudolph

Kaazing.com bietet eine .NET-Client-Bibliothek, die auf Websockets zugreifen kann. Tutorials finden Sie online unter Checklist: Erstellen von Microsoft .NET-JMS-Clients und Checkliste: Erstellen von Microsoft .NET-AMQP-Clients

Es gibt ein Java Websocket Client Projekt auf github.

7
Robert Christie

Es gibt eine Client-Implementierung: http://websocket4net.codeplex.com/ !

5
Kerry Jiang

eine andere Wahl: XSockets.Net , hat Server und Client implementiert.

server kann installiert werden durch: 

PM> Install-Package XSockets

oder installiere den Client durch:

PM> Install-Package XSockets.Client

aktuelle Version ist: 3.0.4

4
sendreams

Hier ist die Liste der von .net unterstützten Websocket-Nuget-Pakete

Websocket-Pakete

Ich bevorzuge die folgenden Kunden

  1. Alchemy Websocket
  2. SocketIO
3
shivakumar

Wenn Sie etwas mehr Gewicht haben möchten, überprüfen Sie einen C # -Server, den ein Freund und ich veröffentlicht haben: https://github.com/Olivine-Labs/Alchemy-Websockets

Unterstützt Vanilla-Websockets sowie Flash-Websockets. Es wurde für unser Online-Spiel mit Fokus auf Skalierbarkeit und Effizienz entwickelt.

1
Jack Lawson

Kürzlich hat das Interoperability Bridges Center eine Prototypimplementierung (in verwaltetem Code) von zwei Entwürfen der WebSockets-Protokollspezifikation veröffentlicht:

draft-hixie-thewebsocketprotocol-75 und draft-hixie-thewebsocketprotocol-76

Der Prototyp ist bei HTML5 Labs zu finden. Ich habe diesen Blogbeitrag alle Informationen, die ich (bis jetzt) ​​gefunden habe, und Codefragmente darüber, wie dies mit WCF möglich ist.

1
Nikos Baxevanis

es ist ein ziemlich einfaches Protokoll. Es gibt eine Java-Implementierung hier die in c # nicht zu schwer zu übersetzen sein sollte. Wenn ich es schaffe, werde ich es hier posten ...

1
billywhizz

Es gibt auch Alchemie. http://olivinelabs.com/Alchemy-Websockets/ was ziemlich cool ist.

0
Rushino