SocketIO verbindung funktioniert nicht aber Websocket verbindungen gehen

DreamGamer

Lieutenant
Registriert
Feb. 2017
Beiträge
543
Hallo, ich wollte in React Native eine Verbindung zwischen meinem Server in NodeJS und dem Endgerät also IOS oder Android herstellen. Dafür kam mir natürlich als erstes SocketIO in den Kopf, aber wenn ich versuche damit eine Verbindung aufzubauen funktioniert dies am Handy nicht, sondern nur am PC über NodeJS. Ich habe daraufhin Websockets getestet und damit funktionierte alles einwandfrei. Weiß einer woran es liegen könnte? Unten stehen die beiden Source Code Versionen kurz gefasst freue mich über jede Hilfe :=)

Websocket:
Client:
Javascript:
const client = new W3CWebSocket("ws://" + HOST + ":" + PORT);

client.onopen = client => {
    console.log("WebSocket Client Connected");
    setIsConnected(true)
};

client.onerror = message => {
    console.log("Error while connecting!");
    setIsConnected(false);
};

Server:
Javascript:
const webSocketsServerPort = 25565;
const webSocketServer = require('websocket').server;
const http = require('http');
const server = http.createServer();
server.listen(webSocketsServerPort);
const wsServer = new webSocketServer({
  httpServer: server
});

const clients = {};

const getUniqueID = () => {
  const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
  return s4() + s4() + '-' + s4();
};

wsServer.on('request', function(request) {
  var userID = getUniqueID();
  const connection = request.accept(null, request.origin);
  clients[userID] = connection;
  console.log('connected: ' + userID)
});

console.log(`Listening on port ${webSocketsServerPort}`)




SocketIO:
Client:
Javascript:
const socket = io(http:// + HOST + ":" + PORT);

socket.on("connect", () => {
    console.log("Connected!")
})

socket.on("connect_failed", () => {
    console.log("Error while connecting!")
});

Server:

Javascript:
const express = require("express");
const http = require("http");
const socketIo = require("socket.io");
const port = process.env.PORT || 25565;
const app = express();
const server = http.createServer(app);
const io = socketIo(server);

io.on("connection", socket => {
    console.log("New client connected");

    socket.on("disconnect", () => console.log("Client disconnected"));
});

server.listen(port, () => console.log(`Listening on port ${port}`));
 
Zuletzt bearbeitet:
"Funktioniert nicht" ist halt recht wenig info...

Ansonsten würde ich mal versuchen, dass du bei server.listen mal deine normale IP mit übergibt, kann sein, dass socketio by default nur auf localhost lauscht.

Per telnet kannst du ganz gut checken, ob du von ner anderen Kiste drauf kommst.
 
@deveth0 Ja, das stimmt nur habe ich bisher keine Fehlermeldung bekommen aber auch kein Eingang zum Server(Also weder connect noch connect_failed hat etwas ausgegeben). Ich wollte es jetzt gerade mit meiner normalen IP probieren und habe meine Datei wieder geändert auf SocketIO wie zuvor auch, da ich die Datei immer nur umbenannt habe und bisher hat er mir immer gesagt "connect_failed" und jetzt ohne das ich etwas geändert habe "connect". Also jetzt funktioniert es, ich teste noch kurz, ob alles geht, falls ja, muss es ja etwas außerhalb des Source Codes sein, dass die Verbindung blockiert hat, oder?
Ergänzung ()

Hm seltsam, es funktioniert jetzt zwar also die Verbindung wird hergestellt und ich kann beiderseits kommunizieren, aber sobald der Server Offline ist bekomme ich keine Meldung er verbindet sich nur Automatisch wieder, sobald er Online ist mehr aber nicht. Ich habe die Events jetzt noch erweitert zu diesen hier:

Javascript:
const socket = io("http://" + HOST + ":" + PORT);

socket.on("connect", () => {
console.log("connect");
});

socket.on("connect_failed", () => {
console.log("connect_failed");
});

socket.on("disconnect", () => {
console.log("disconnect");
});

socket.on("connect_error", () => {
console.log("connect_error");
});

socket.on("connect_timeout", () => {
console.log("connect_timeout");
});

socket.on("reconnect", () => {
console.log("reconnect");
});

socket.on("reconnect_attempt", () => {
console.log("reconnect_attempt");
});

socket.on("reconnect_error", () => {
console.log("reconnect_error");
});

socket.on("reconnecting", () => {
console.log("reconnecting");
});

socket.on("reconnect_failed", () => {
console.log("reconnect_failed");
});

Aber es reagiert kein Event außer "connect" und "disconnect". Sobald der Server Offline ist oder nicht erreichbar passiert nichts. Woran könnte das liegen?
 
Zuletzt bearbeitet:
Wo hast du die Events her? Wenn ich mir die Docs so anschaue, dann gibt es:
  • error
  • reconnect
  • reconnect_attempt
  • reconnect_error
  • reconnect_failed
  • ping
Versuch es doch mal mit 'error' vielleicht bekommst du da was. Ansonsten ist das schöne bei JS eigentlich immer, dass man da recht einfach mal nen Debugger reinhängen kann...
 
@deveth0 Oh, ich kam irgendwie 0 auf die Idee, dass es offizielle Docs zu SocketIO gibt ups ^^ Ich habe die Events von hier: https://stackoverflow.com/questions/24224287/list-of-socket-io-events

Ich probiere direkt einmal die Events aus den offiziellen Docs :=)
Ergänzung ()

Hmm, schade mit diesen Events kommt ebenfalls kein Error. Ich bin jetzt alle Events durchgegangen und sobald der Server Offline ist, wird keiner der 9 vorhanden Events getriggert.

Das hier sind jetzt die neuen korrekten Events:

Javascript:
socket.on("connect", () => {
    console.log("Sucessfully connected!");
});

socket.on("disconnect", () => {
    console.log("disconnect");
});

socket.on("connect_error", () => {
    console.log("connect_error");
});

socket.on("reconnect", () => {
    console.log("reconnect");
});

socket.on("reconnect_error", () => {
    console.log("reconnect_error");
});

socket.on("reconnect_failed", () => {
    console.log("reconnect_failed");
});

socket.on("error", () => {
    console.log("error");
});

socket.on("reconnect_attempt", () => {
    console.log("reconnect_attempt");
});

socket.on("ping", () => {
    console.log("ping");
});
 
Zuletzt bearbeitet:
Zurück
Oben