Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le système de chat Socket.IO ne marche pas.

Application Android. Java. (NodeJS et HTML pour Socket.IO)

    7 septembre 2019 à 23:39:01

    Je crée une application Android, je veux faire une partie de chat pour elle. Problème, lorsque j'essaie d'envoyer un message,
    rien ne s'affiche. Dans la console, aucun message de connexion ne s'affiche.

    Donc, j'ai essayé d'ouvrir l'URL dans mon navigateur Web, et ça marche. J'ai un message de connexion.
    Si vous posez des questions sur mon code (voir ci-après), j'ai testé mon ListAdapter, il marche. Je suis à peu près
    sûr que le problème vient de la communication entre l'application Android et le serveur Web.

    Android chat fragment :

    public class ChatFragment extends Fragment {
    
        private ChatFragment activity;
        private EditText input;
        private ImageView fab;
        private ListView listView;
    
        ArrayList<String> userArray = new ArrayList<String>();
        ArrayList<String> msgArray = new ArrayList<String>();
        ArrayList<String> dateArray = new ArrayList<String>();
    
        CustomListAdapter whatever;
    
        private Socket mSocket;
        {
            try {
                mSocket = IO.socket("http://###########");
            } catch (URISyntaxException e) {}
        }
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_chat, container, false);
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    
            whatever = new CustomListAdapter(this, userArray, msgArray, dateArray);
    
            this.activity = this;
    
            //Associating visual elements to variables
            fab = (ImageView) getView().findViewById(R.id.fab);
            input = (EditText) getView().findViewById(R.id.input);
    
            //Defining the event for new messages
            mSocket.on("chat message", onNewMessage);
            //Start connection with server
            mSocket.connect();
    
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    //Sending the message to online chat
                    attemptSend();
    
                    // Clear the input
                    input.setText("");
                }
            });
    
        }
    
        private void attemptSend() {
            String message = input.getText().toString().trim();
            if (TextUtils.isEmpty(message)) {
                return;
            }
    
            mSocket.emit("chat message", message);
        }
    
        private Emitter.Listener onNewMessage = new Emitter.Listener() {
            @Override
            public void call(final Object... args) {
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        JSONObject data = (JSONObject) args[0];
                        String username;
                        String message;
                        try {
                            username = data.getString("username");
                            message = data.getString("message");
                        } catch (JSONException e) {
                            return;
                        }
    
                        // add the message to view
                        addMessage(username, message);
                    }
                });
            }
        };
    
        public void addMessage(String user, String msg){
    
    
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
            String currentDateandTime = sdf.format(new Date());
    
            userArray.add(user);
            msgArray.add(msg);
            dateArray.add(currentDateandTime);
    
    
    
            listView = (ListView) getView().findViewById(R.id.list_of_messages);
            listView.setAdapter(whatever);
    
        }
    
    }
    
    Code HTML :
    <!doctype html>
    <html>
      <head>
        <title>GamingLink public chat</title>
      </head>
      <body>
        <script src="/socket.io/socket.io.js"></script>
        <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
        <script>
          $(function () {
            var socket = io();
            $('form').submit(function(e){
              e.preventDefault(); // prevents page reloading
              socket.emit('chat message', $('#m').val());
              $('#m').val('');
              return false;
            });
            socket.on('chat message', function(msg){
              $('#messages').append($('<li>').text(msg));
            });
          });
        </script>
      </body>
    </html>
    Code NodeJs :
    var app = require('express')();
    var http = require('http').createServer(app);
    var io = require('socket.io')(http);
    
    app.get('/', function(req, res){
      res.sendFile(__dirname + '/index.html');
    });
    
    io.on('connection', function(socket){
      console.log('Un utilisateur c\'est connecté');
      socket.on('disconnect', function(){
        console.log('Un utilisateur c\'est déconnecté');
      });
      socket.on('chat message', function(msg){
        console.log('message: ' + msg);
        io.emit('chat message', msg);
      });
    });
    
    http.listen(80, function(){
      console.log('listening on *:3000');
    });
    



    J'espère que vous pourrez m'aider à résoudre mon bug, je suis vraiment novice dans l'utilisation de websockets.

    Merci d'avance. Monsieur TM82.

    -
    Edité par MisterTM82 7 septembre 2019 à 23:43:05

    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2019 à 20:55:51

      Bonsoir,

      Ton serveur web est en local ou chez un hébergeur ?
      • Partager sur Facebook
      • Partager sur Twitter

      Le système de chat Socket.IO ne marche pas.

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown