sacOO7 / SocketclusterClientDotNet

C# client for socketcluster framework in node.js
http://socketcluster.io/#!/
Apache License 2.0
69 stars 16 forks source link

Can't connect to socket cluster server #17

Open kevinvella opened 6 years ago

kevinvella commented 6 years ago

I have a weird issue. When connecting to a a web socket server using the domain name in a xamarin mobile application, the server is logging "SocketProtocolError: Socket hung up" and from the client "System.InvalidOperationException: Operation already in progress"

When i try the code from a console application, the client connects fine and is able to send and receive data

ScClient.Offical version is 1.1.2

Socket Cluster server versions: "dependencies": { "connect": "3.0.1", "express": "4.14.0", "minimist": "1.1.0", "morgan": "1.7.0", "sc-errors": "^1.4.0", "sc-framework-health-check": "^2.0.0", "sc-hot-reboot": "^1.0.0", "scc-broker-client": "^3.0.0", "serve-static": "1.11.2", "socketcluster": "^11.2.0", "socketcluster-client": "^11.0.1" }

public class SCService
    {
        private Socket socket;
        public SCService()
        {
            try
            {
                socket = new Socket("ws://bbtest.eu-4.evennode.com/socketcluster/");

                socket.SetReconnectStrategy(new ReconnectStrategy().SetMaxAttempts(30));
                socket.SetSslCertVerification(false);
                //socket.SetAuthToken("12345678");

                socket.SetListerner(new SocketClusterListener());
                socket.Connect();
            }
            catch (Exception ex)
            {

            }

        }

        public Socket Socket
        {
            get => socket;
        }
    }

    public class SocketClusterListener : IBasicListener
    {
        private string TAG = "SocketCluster";
        public void OnConnected(Socket socket)
        {
            Debug.WriteLine($"{TAG} - connected got called");
        }

        public void OnDisconnected(Socket socket)
        {
            Debug.WriteLine($"{TAG} - disconnected got called");
        }

        public void OnAuthentication(Socket socket, bool status)
        {
            Debug.WriteLine(status ? $"{TAG} - Socket is authenticated" : $"{TAG} - Socket is not authenticated");
        }

        public void OnSetAuthToken(string token, Socket socket)
        {
            socket.SetAuthToken(token);
            Debug.WriteLine($"{TAG} - on set auth token got called");
        }

        public void OnConnectError(Socket socket, SuperSocket.ClientEngine.ErrorEventArgs e)
        {
            Debug.WriteLine($"{TAG} - Error on Connection... {e.Exception}");
        }
    }
sacOO7 commented 6 years ago

Hi @kevinvella , can you give me detailed log for this?

kevinvella commented 6 years ago

Hi @sacOO7, What information do you need? Running platforms, etc...?

kevinvella commented 6 years ago

Hi @sacOO7 Created a simple repository containg a console application and a xamarin forms application containing both android u ios. Repository here https://github.com/kevinvella/Socket-Cluster-Test

The exception that occurs on the xamarin forms app is the following: SocketCluster - Error on Connection... System.InvalidOperationException: Operation already in progress at System.Net.Sockets.SocketAsyncEventArgs.SetLastOperation (System.Net.Sockets.SocketAsyncOperation op) [0x00021] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.10.1.177/src/Xamarin.iOS/mcs/class/System/System.Net.Sockets/SocketAsyncEventArgs.cs:193 at System.Net.Sockets.Socket.InitSocketAsyncEventArgs (System.Net.Sockets.SocketAsyncEventArgs e, System.AsyncCallback callback, System.Object state, System.Net.Sockets.SocketOperation operation) [0x00030] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.10.1.177/src/Xamarin.iOS/mcs/class/System/System.Net.Sockets/Socket.cs:2727 at System.Net.Sockets.Socket.ReceiveAsync (System.Net.Sockets.SocketAsyncEventArgs e) [0x00073] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.10.1.177/src/Xamarin.iOS/mcs/class/System/System.Net.Sockets/Socket.cs:1375 at SuperSocket.ClientEngine.AsyncTcpSession.StartReceive () [0x0000c] in <dbd80dafc8794140aef5960a6254d156>:0 SocketCluster - disconnected got called

sacOO7 commented 6 years ago

Hi @kevinvella , will take a look at it :+1:

sacOO7 commented 6 years ago

HI @kevinvella , I think it might be creating multiple service objects, so trying to connect to server multiple times. Can you move connect method somewhere else. It might work ...

sacOO7 commented 6 years ago

Also make sure you have proper permission to have network access. I think currently the connection might be running on UI thread. So you need to connect to server on background thread probably.

kevinvella commented 6 years ago

Connected to localhost with following

socket = new Socket("ws://127.0.0.1:8000/socketcluster/");

With the following it doesn't connect socket = new Socket("ws://localhost:8000/socketcluster/");

Also tested with

Task.Run(() => 
  {
    socket.Connect();
  });
sacOO7 commented 6 years ago

Not sure why it's not able to resolve domain name. Try starting server on specific ip address and then point socket to that address.

On May 14, 2018 2:52 AM, "kevinvella" notifications@github.com wrote:

Connected to localhost with following

socket = new Socket("ws://127.0.0.1:8000/socketcluster/");

With the following it doesn't connect socket = new Socket("ws://localhost:8000/socketcluster/");

Also tested with

Task.Run(() => { socket.Connect(); });

ā€” You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/sacOO7/SocketclusterClientDotNet/issues/17#issuecomment-388656974, or mute the thread https://github.com/notifications/unsubscribe-auth/AP8vSXs8gB5f_Hi7ZrnRVGQRsjuw32t9ks5tyKQxgaJpZM4Tp2lb .

kevinvella commented 6 years ago

Will check later. One more thing on the console app i'm able to connect to the socket using the domain name as in socket = new Socket("ws://localhost:8000/socketcluster/");

sacOO7 commented 6 years ago

Hi @kevinvella , any updated on this? If it's working, I will be closing the issue šŸ‘

kevinvella commented 6 years ago

Hi @sacOO7 ,

Sorry for not posting any sooner. I haven't had any time to test. I switched to PureSocketCluster and it worked due to a project time constrains.

I don't think the problem is in your lib. I think it's more related to how WebSocket4Net is working. Should we link this issue to WebSocket4Net repo issues?

sacOO7 commented 6 years ago

Hi @kevinvella , it should work on both libraries. I will look into the issue šŸ‘ .

kevinvella commented 6 years ago

Ok. Thanks. If i have time, i will also take a look

kevinvella commented 6 years ago

Hi,

Any updates on this?

sacOO7 commented 6 years ago

Hi @keveinvilla, I was not able to reproduce the issue, might have to look into it again šŸ˜Œ. Not sure why it creates problem while connecting to server. I believe it might be ip related issue since it was working for you for localhost url

On Jun 5, 2018 4:34 PM, "kevinvella" notifications@github.com wrote:

Hi,

Any updates on this?

ā€” You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/sacOO7/SocketclusterClientDotNet/issues/17#issuecomment-394669148, or mute the thread https://github.com/notifications/unsubscribe-auth/AP8vSf6DDYlnFrFua2maMm0SJSaYDV6mks5t5mXSgaJpZM4Tp2lb .

kevinvella commented 6 years ago

Hi @sacOO7, Ok. just fyi the hosting provider of the test app is evennode.com.