0
votes

J'utilise Socket.io, mais il n'y a pas de communication entre le client et le serveur

Je développe un jeu d'échecs multijoueurs à l'aide de Node JS avec socket.io. Le jeu affiche bien dans le fichier index.html et fonctionne correctement sur le serveur lorsque je l'exécute sur localhost: 8080. Cependant, les mouvements d'échecs ne sont pas soumis à l'autre joueur, même si je faisais tout ce qui est juste. Qu'est-ce qui manque? J'ai une socket.io installé correctement

J'ai essayé de ré-regarder le tutoriel sur YouTube encore et encore pour repérer mon erreur, mais je ne peux pas. J'ai tout fait en conséquence. J'ai dû louper quelque chose. Voici le lien https://www.youtube.com/watch?v=Affqigjo7fq&t=1621s p>

EDIT P>

Voici le lien vers le didacticiel sur la construction du jeu d'échecs multijoueur http://dwcares.com/2015/10/21/realchess/ p> xxx pré>

ci-dessous est mon serveur Fichier P>

var express = require('express');
var app = express();
app.use(express.static("[ublic]"));
var http = require("http").Server(app);
var path = require('path');
var public = path.join(__dirname, 'public');
var io = require("socket.io")(http);


// viewed at http://localhost:8080
app.get('/', function(req, res) {
    res.sendFile(path.join(public, 'index.html'));
});

io.on('connection', function(socket){
  console.log('a user has connected');

    socket.on("message", function(msg) {
        console.log("Message from client: "+ msg);
    });


    socket.on("move", function(msg) {
        socket.broadcast.emit("move", msg);
    });

    socket.on('disconnect', function(){
    console.log('a user disconnected');
  });

});




http.listen(8080, function(){
  console.log('listening on *:8080');
});

app.use('/', express.static(public));











1 commentaires

Votre serveur Io est en cours d'exécution sur le port 8080 (comme dans votre code)


3 Réponses :


-1
votes

pourrait-il être que handlemove code> n'est jamais appelé? Je ne peux pas le voir dans le code que vous avez fourni.

EDIT STRY>: Vous vous connectez également à l'aide de var socket = io.Connect ('http: // localhost'); Code> p>

Le port HTTP est 80 code> par défaut. Essayez de vous connecter à http: // localhost: 8080 code> p>

Pour ce faire, modifiez votre script dans le fichier HTML: p>

var onDrop = function(source, target) {
  removeGreySquares();

  // see if the move is legal
  var move = game.move({
    from: source,
    to: target,
    promotion: 'q' // NOTE: always promote to a queen for example simplicity
  });

  // illegal move
  if (move === null) return 'snapback';
  else socket.emit("move", move);
};


12 commentaires

Le code de jeu est dans le fichier HTML. Handlemove est appelé dans le fichier HTML. Suis-je supposé l'appeler dans le fichier de serveur aussi?


Vous déclarez une variable de fonction appelée Handlemove dans le fichier HTML. Voir la réponse Helens, qui va probablement résoudre votre problème avec la connexion.


J'ai mis à jour ma réponse, c'est juste après la balise d'ouverture . Vous devriez le trouver;)


J'ai fait comme vous l'avez demandé, mais il n'y a toujours aucune communication entre le serveur et le client. Les mouvements d'échecs ne sont pas soumis


Votre Ondrop Appels de fonction Déplacez sur l'échec de l'échec et vérifie si le déplacement est null. Après que rien ne se passe. Votre handlemove Appels de fonction socket.emit ("déplacer", déplacer); qui devrait envoyer le déplacement à l'autre joueur. Mais qui appelle handlemove ?


Je suis confus. Désolé je suis un débutant avec codage


J'ai mis à jour ma réponse à nouveau. Veuillez sélectionner ceci comme réponse acceptée à votre question si cela résout votre problème et cela le fera, je l'ai testé. Vous utilisez également une version très ancienne.IO. Consultez ceci: socket.io/blog/socket-IO-2-0-1-2-0-2-AND-2-0-3


J'ai encore une fois fait comme vous l'avez dit et je ne reçois toujours pas cette connexion. Je suis tellement frustré. Cela vous dérange-t-il si je vous envoie mon code source et que vous l'essayez? Est-ce que ça va si j'ai votre code source et j'essaye le vôtre parce que je deviens paranoïaque et fou ici


Mon email est M.Araqi@live.com si vous pouviez s'il vous plaît envoyez-moi le dossier. Je vais répondre avec le mien


Je t'ai envoyé un mail :)


Avez-vous eu l'email?


Bonjour mrhunchojack! Ma réponse a-t-elle résolu votre problème? Acclamations



2
votes
var socket = io.connect('http://localhost:8080');
Your server is running on 8080 however you are trying to connect :80. This should fix the problem.

3 commentaires

Je ne comprends pas, où dois-je mettre cette ligne de code. le client ou le serveur? Je l'ai mis sur le serveur et j'ai eu une erreur car "io.connect n'est pas une fonction"


@Mrhunchojack Ajoutez ceci à votre client


Je l'ai fait et j'ai remplacé cette ligne de code. Cependant, je n'ai toujours aucune communication entre le client et le serveur. Les coups d'échecs ne se soumettent pas. Cependant, j'obtiens toujours qu'un "utilisateur a connecté" et "utilisateur a déconnecté" message chaque fois qu'un onglet s'ouvre ou se ferme. Qu'est-ce qui se passe



1
votes

J'ai recréé votre code et j'ai trouvé quelques petites choses nécessitant un ajustement.

  1. Votre connexion IO comme mentionné ci-dessus - Ajoutez le port comme Li> ol>

    p>

     var socket = io.connect('http://localhost:8088');
            var board = ChessBoard('board', 'start');
    
            var msgButton = $('button');
    
            // $('.msgButton').click(() => {
            //   console.log('Hello');
            // });
    
    
            var board,
                game = new Chess();
    
            var removeGreySquares = function () {
                $('#board .square-55d63').css('background', '');
            };
    
            var greySquare = function (square) {
                var squareEl = $('#board .square-' + square);
    
                var background = '#a9a9a9';
                if (squareEl.hasClass('black-3c85d') === true) {
                    background = '#696969';
                }
    
                squareEl.css('background', background);
            };
    
            var onDragStart = function (source, piece) {
                // do not pick up pieces if the game is over
                // or if it's not that side's turn
                if (game.game_over() === true ||
                    (game.turn() === 'w' && piece.search(/^b/) !== -1) ||
                    (game.turn() === 'b' && piece.search(/^w/) !== -1)) {
                    return false;
                }
            };
    
            var onDrop = function (source, target) {
                removeGreySquares();
    
                // see if the move is legal
                var move = game.move({
                    from: source,
                    to: target,
                    promotion: 'q' // NOTE: always promote to a queen for example simplicity
                });
                // console.log('=== dron');
    
                // illegal move
                if (move === null) {
                    console.log('invalid');
                    return 'snapback';
                } else {
                    console.log('valid');
                    socket.emit("move", move)
                }
                
            };
    
            var onMouseoverSquare = function (square, piece) {
                // get list of possible moves for this square
                var moves = game.moves({
                    square: square,
                    verbose: true
                });
    
                // exit if there are no moves available for this square
                if (moves.length === 0) return;
    
                // highlight the square they moused over
                greySquare(square);
    
                // highlight the possible squares for this piece
                for (var i = 0; i < moves.length; i++) {
                    greySquare(moves[i].to);
                }
            };
    
            var onMouseoutSquare = function (square, piece) {
                removeGreySquares();
            };
    
            var onSnapEnd = function () {
                board.position(game.fen());
            };
    
            var cfg = {
                draggable: true,
                position: 'start',
                onDragStart: onDragStart,
                onDrop: onDrop,
                onMouseoutSquare: onMouseoutSquare,
                onMouseoverSquare: onMouseoverSquare,
                onSnapEnd: onSnapEnd
            };
            board = ChessBoard('board', cfg);
    
            // var socket = io();
            msgButton.click(function (e) {
                console.log('++clicked');
                socket.emit("message", "hello boi");
            });
    
            var handleMove = function (source, target) {
                var move = game.move({ from: source, to: target });
                console.log('===');
    
                if (move === null) return "snapback";
                else socket.emit("move", move);
            };
    
            socket.on("move", function (msg) {
                console.log('++move received: ', msg);
                game.move(msg);
                board.position(game.fen());
            });


0 commentaires