doghappy / socket.io-client-csharp

socket.io-client implemention for .NET
MIT License
715 stars 124 forks source link

The server returned status code '400' when status code '101' was expected. #347

Closed flyliu33 closed 7 months ago

flyliu33 commented 7 months ago

Hi, I'm using version 3.1.1 and .Net 6. This is the errors :

Websocket OnReconnectError
SocketIOClient.Transport.TransportException: Could not connect to 'wss://chat.liveshopping.gr/socket.io/?EIO=4&transport=websocket'
 ---> System.Net.WebSockets.WebSocketException (0x80004005): The server returned status code '400' when status code '101' was expected.
   at System.Net.WebSockets.WebSocketHandle.ConnectAsync(Uri uri, CancellationToken cancellationToken, ClientWebSocketOptions options)
   at System.Net.WebSockets.ClientWebSocket.ConnectAsyncCore(Uri uri, CancellationToken cancellationToken)
   at SocketIOClient.Transport.WebSockets.DefaultClientWebSocket.ConnectAsync(Uri uri, CancellationToken cancellationToken)
   at SocketIOClient.Transport.WebSockets.WebSocketTransport.ConnectAsync(Uri uri, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at SocketIOClient.Transport.WebSockets.WebSocketTransport.ConnectAsync(Uri uri, CancellationToken cancellationToken)
   at SocketIOClient.SocketIO.<>c__DisplayClass88_0.<<ConnectInBackground>b__0>d.MoveNext()
Websocket OnReconnectAttempt

My code is below.

        var client = new SocketIOClient.SocketIO("https://chat.liveshopping.gr/chat", new SocketIOOptions
        {
            ReconnectionAttempts = 5,

        });

        client.On("stream_visitors", response =>
        {
            // You can print the returned data first to decide what to do next.
            // output: ["ok",{"id":1,"name":"tom"}]
            Console.WriteLine("Websocket " + response);

            // Get the first data in the response
            string text = response.GetValue<string>();
            // Get the second data in the response
            // var dto = response.GetValue<TestDTO>(1);

            // The socket.io server code looks like this:
            // socket.emit('hi', 'ok', { id: 1, name: 'tom'});
        });

        client.OnConnected += async (sender, e) =>
        {
            Console.WriteLine("Websocket Connected");
            // Emit a string
            // await client.EmitAsync("hi", "socket.io");

            // Emit a string and an object
            // var dto = new TestDTO { Id = 123, Name = "bob" };
            // await client.EmitAsync("register", "source", dto);
        };
        client.OnDisconnected += (sender, e) =>
        {
            Console.WriteLine("Websocket OnDisconnected");
            Console.WriteLine(e);
        };
        client.OnError += (sender, e) =>
        {
            Console.WriteLine("Websocket Error");
            Console.WriteLine(e);
        };
        client.OnReconnected += (sender, e) =>
        {
            Console.WriteLine("Websocket OnReconnected");
            Console.WriteLine(e);
        };
        client.OnReconnectAttempt += (sender, e) =>
        {
            Console.WriteLine("Websocket OnReconnectAttempt");
            Console.WriteLine(e);
        };
        client.OnReconnectError += (sender, e) =>
        {
            Console.WriteLine("Websocket OnReconnectError");
            Console.WriteLine(e);
        };
        client.OnReconnectFailed += (sender, e) =>
        {
            Console.WriteLine("Websocket OnReconnectFailed");
            Console.WriteLine(e);
        };
        client.OnPing += (sender, e) =>
        {
            Console.WriteLine("Websocket OnPing");
            Console.WriteLine(e);
        };
        client.OnPong += (sender, e) =>
        {
            Console.WriteLine("Websocket OnPong");
            Console.WriteLine(e);
        };

        client.ConnectAsync();

This is my socket server url : https://chat.liveshopping.gr/chat

This client tool(browser based) can work well with this url https://socketio-playground.ibrod83.com/online-playground/

But this client tool can not work well https://amritb.github.io/socketio-client-tool/v1/#url=aHR0cHM6Ly9zb2NrZXQtaW8uZG9naGFwcHkud2FuZw==&path=&opt=eyJxdWVyeSI6eyJ0b2tlbiI6ImlvIn19&events=hi

Thanks very much.

doghappy commented 7 months ago

use this instead

var client = new SocketIOClient.SocketIO("https://chat.liveshopping.gr/chat", new SocketIOOptions
{
    ReconnectionAttempts = 5,
    Transport =  TransportProtocol.Polling,
    AutoUpgrade = false,
});