socket.io-client-dart
socket.io-client-dart copied to clipboard
stuck at connecting
Hi, I'm currently using this plugin to connect to my netty-socket io server which hosted on an android tablet.
When I try to connect, it stuck at connecting.
but on my server side, I can see it is connected with its sessionId
Here's my server side code:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private Configuration config;
private SocketIOServer server;
private HandlerThread backgroundThread;
private Handler backgroundHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backgroundThread = new HandlerThread("background");
backgroundThread.start();
backgroundHandler = new Handler(backgroundThread.getLooper());
config = new Configuration();
config.setPort(9092);
server = new SocketIOServer(config);
server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient client) {
Log.d(TAG, client.getSessionId().toString());
}
});
server.addDisconnectListener(new DisconnectListener() {
@Override
public void onDisconnect(SocketIOClient client) {
Log.d(TAG, client.getSessionId().toString());
}
});
server.addEventListener("message", String.class, new DataListener<String>() {
@Override
public void onData(SocketIOClient client, String data, AckRequest ackSender) throws Exception {
Log.d(TAG, "[message] " + data);
}
});
}
@Override
protected void onStart() {
super.onStart();
backgroundHandler.post(new Runnable() {
@Override
public void run() {
server.start();
}
});
}
@Override
protected void onStop() {
server.stop();
super.onStop();
}
@Override
protected void onDestroy() {
backgroundThread.quit();
backgroundThread = null;
backgroundHandler = null;
super.onDestroy();
}
}
Here's my client side code:
import 'dart:io';
import 'package:socket_io_client/socket_io_client.dart';
Socket initSocket() {
Socket socket = io(
// 'http://192.168.200.124:9092/chat',
'http://192.168.200.104:9092',
OptionBuilder()
.setTransports(['websocket'])
.disableAutoConnect()
.build());
socket.onConnect((data) {
print("connected");
socket.emit("message");
});
socket.onDisconnect((data) => print("disconnected"));
socket.onConnectError((data) => print("connect_error: $data"));
socket.onConnectTimeout((data) => print("connect_timeout: $data"));
socket.onConnecting((data) => print("connecting: $data"));
socket.onError((data) => print("error: $data"));
socket.onReconnect((data) => print("reconnect: $data"));
socket.onReconnectAttempt((data) => print("reconnect_attempt: $data"));
socket.onReconnectFailed((data) => print("reconnect_failed: $data"));
socket.onReconnectError((data) => print("reconnect_error: $data"));
socket.onReconnecting((data) => print("reconnecting: $data"));
socket.onPing((data) => print("ping: $data"));
socket.onPong((data) => print("pong: $data"));
socket.on("message", (data) => print("[message]: $data"));
return socket;
}
void main() {
Socket socket = initSocket();
socket.connect();
socket.emit("message");
}
Versions:
- flutter_sdk: '>=2.7.0 <3.0.0'
- netty-socketio: 1.7.18
- socket_io_client: ^0.9.12
Also, in my android project, I already add Internet permission and set usesCleartextTraffic to true.
Please help, thanks
I am facing the same issue.
- commenting to get updated on this.
@johntyty912 I tested with this example - https://github.com/mrniko/netty-socketio-demo/blob/master/server/src/main/java/com/corundumstudio/socketio/demo/AckChatLauncher.java#L16 And change the code as follows:
Configuration config = new Configuration();
config.setHostname("YourIPAddress"); // <- your IP address instead of "localhost"
config.setPort(9092);
final SocketIOServer server = new SocketIOServer(config);
server.addEventListener("message", String.class, new DataListener<String>() {
@Override
public void onData(SocketIOClient client, String data, AckRequest ackSender) throws Exception {
System.out.println("[message] " + data);
}
});
And the client code is the same as yours and all the versions are same as yours.
Then it works for me on Android simulator and pure Dart code.
Launching lib/main.dart on Android SDK built for x86 in debug mode...
Running Gradle task 'assembleDebug'...
✓ Built build/app/outputs/flutter-apk/app-debug.apk.
Installing build/app/outputs/flutter-apk/app.apk...
Syncing files to device Android SDK built for x86...
D/EGL_emulation(16045): eglMakeCurrent: 0xebb198a0: ver 3 0 (tinfo 0xebb578c0)
D/eglCodecCommon(16045): setVertexArrayObject: set vao to 0 (0) 1 0
I/flutter (16045): connected
Application finished.
@jumperchen Thanks for reply, I tried to set the Hostname to my IP Address, but the same issue still happen.
Here's the code on server side after change:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private Configuration config;
private SocketIOServer server;
private HandlerThread backgroundThread;
private Handler backgroundHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backgroundThread = new HandlerThread("background");
backgroundThread.start();
backgroundHandler = new Handler(backgroundThread.getLooper());
config = new Configuration();
config.setHostname(NetworkUtils.getIPAddress(true));
config.setPort(9092);
server = new SocketIOServer(config);
server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient client) {
Log.d(TAG, client.getSessionId().toString());
}
});
server.addDisconnectListener(new DisconnectListener() {
@Override
public void onDisconnect(SocketIOClient client) {
Log.d(TAG, client.getSessionId().toString());
}
});
server.addEventListener("message", String.class, new DataListener<String>() {
@Override
public void onData(SocketIOClient client, String data, AckRequest ackSender) throws Exception {
Log.d(TAG, "[message] " + data);
}
});
}
@Override
protected void onStart() {
super.onStart();
backgroundHandler.post(new Runnable() {
@Override
public void run() {
server.start();
}
});
}
@Override
protected void onStop() {
server.stop();
super.onStop();
}
@Override
protected void onDestroy() {
backgroundThread.quit();
backgroundThread = null;
backgroundHandler = null;
super.onDestroy();
}
}
Do you have any advice? Or Would you recommend other library or plugin to implement Socket IO Server on android?
Thanks!!!
I've successfully resolved this issue.
So basically, my socket package on server has version ^4.x.x and the socket version I was using on my app was 0.9.12, same as you did.
After checking several threads I found that these two versions are just incompatible and its not even mentioned on pub.dev.
It is in fact mentioned in the repository, So if you're working on version ^4.x.x on server side, then just update your app's socket_io_client version to one these
2.0.0-beta.3-nullsafety.0
2.0.0-beta.3
2.0.0-beta.2
2.0.0-beta.1
2.0.0-beta
I've personally used 2.0.0-beta.3
on my project. It's working fine now.
You can check the versions for the package here https://pub.dev/packages/socket_io_client/versions
Kudos!
@uV3301 Is it working in iOS for you? I successfully connect from Android but iOS just keep looping through ping timeout error I'm using 2.0.0-beta.3
@DowsingUK Sorry mate, I'm working with projects on Android only.
Not sure about iOS.