Я пытаюсь подключить свое приложение android к nodeJS серверу, используя Socket.io, это код подключения от android:
final String URL = "http://192.168.0.103:3000";
try {
mSocket = IO.socket(URL);
mSocket.connect();
mSocket.emit("message", "Hello");
Toast.makeText(MainActivity.this, "Socket Connected!!",Toast.LENGTH_SHORT).show();
} catch (URISyntaxException e) {
e.printStackTrace();
}
, ничего больше на android, Также к манифесту добавлено мое разрешение inte rnet, и я использую следующую библиотеку:
implementation 'com.github.nkzawa:socket.io-client:0.6.0'
На стороне сервера я также использую библиотеку Socket.io, но для nodeJS и соединение устанавливается как в следующих строках кода:
const app = express();
app.set("port", process.env.PORT || 3000);
let http = require("http").Server(app);
let io = require("socket.io")(http);
app.use(bodyParser.json());
app.use(function(req, res, next) {
res.header("Content-Type", "application/json");
next();
});
app.get("/", (req: any, res: any) => {
res.send("hello world");
});
io.on("connection", function(socket: any) {
console.log("a user connected");
// whenever we receive a 'message' we log it out
socket.on("message", function(message: any) {
console.log(message);
});
});
const server = http.listen(3000, function() {
console.log("listening on *:3000");
});
Когда я пытаюсь подключиться с android, любая строка кода выполняется с успехом, даже сообщение Toast, но на сервере ничего , Кроме того, я сделал небольшой скрипт на nodeJS с использованием библиотеки "socket.io-client"
, для тестирования, где я пытаюсь подключиться к тому же серверу, и все работает нормально, соединение создано успешно, я получаю сообщение на терминал с сервера, и из сценария также у меня есть сообщение об успехе. следующий скрипт выглядит так:
var io = require("socket.io-client");
function checkSocketIoConnect(url, timeout) {
return new Promise(function (resolve, reject) {
var errAlready = false;
timeout = timeout || 5000;
var socket = io(url, { reconnection: false, timeout: timeout });
// success
socket.on("connect", function () {
clearTimeout(timer);
resolve();
socket.close();
});
// set our own timeout in case the socket ends some other way than what we are listening for
var timer = setTimeout(function () {
timer = null;
error("local timeout");
}, timeout);
// common error handler
function error(data) {
if (timer) {
clearTimeout(timer);
timer = null;
}
if (!errAlready) {
errAlready = true;
reject(data);
socket.disconnect();
}
}
// errors
socket.on("connect_error", error);
socket.on("connect_timeout", error);
socket.on("error", error);
socket.on("disconnect", error);
});
}
checkSocketIoConnect("http://192.168.0.103:3000").then(function () {
// succeeded here
console.log("working");
}, function (reason) {
// failed here
console.log("why not: ", reason);
});