首页 > 解决方案 > Flutter with Node Socket IO 在模拟器上工作但在真实设备上不工作

问题描述

服务器端节点 socket.io = ^2.0.3

flutterSide flutter_socket_io: ^0.6.0

颤振端代码

import 'dart:convert';
import 'package:flutsocketchat/models/local/localMessage.dart';
import 'package:flutsocketchat/models/user.dart';
import 'package:flutsocketchat/providers/local/localMessageStoreProvider.dart';
import 'package:flutsocketchat/screens/homePage.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_socket_io/flutter_socket_io.dart';
import 'package:flutter_socket_io/socket_io_manager.dart';

class ChatFunctionsProvider with ChangeNotifier {

  final String currentUserID = HomePage.currentUSerId;
  final localMessageStorageProvider = LocalMessageStoreProvider();

  //Getter And Setter For Users
  List<User> _userList = [
    User("Sonu", "111"),
    User("Monu", "222"),
    User("Gonu", "333"),
    User("Tonu", "444"),
  ];

  List<User> get mates =>
      _userList.where((user) => user.id != currentUserID).toList();

  SocketIO socketIO;

  //Initialize Socket
  void initSocket() {
    socketIO = SocketIOManager().createSocketIO(
      'http://198.158.275.132:5050',
      '/',
      query: 'chatID=${HomePage.currentUSerId}',
    );

    socketIO.init();
//Receive Message Function
    socketIO.subscribe('receive_message', (jsonData) {
      Map<String, dynamic> data = json.decode(jsonData);
      localMessageStorageProvider.addMessageInStore(
        LocalMessage(
          receiver: data['receiverChatID'],
          text: data['content'],
          sender: data['senderChatID'],
        ),
      );
      notifyListeners();
    });

    socketIO.connect();
  }

  // Send Message Function
  void sendMessage(String text, String receiverChatID) {
    localMessageStorageProvider.addMessageInStore(LocalMessage(
      sender: currentUserID,
      text: text,
      receiver: receiverChatID,
    ));
    socketIO.sendMessage(
      'send_message',
      json.encode({
        'receiverChatID': receiverChatID,
        'senderChatID': currentUserID,
        'content': text,
      }),
    );
    notifyListeners();
  }

  destroySocket() {
    if (socketIO != null) {
      SocketIOManager().destroySocket(socketIO);
    }
  }

}

服务器端代码

const app = require('express')()
const http = require('http').createServer(app)
const io = require('socket.io')(http);

app.get('/', (req, res) => {
    res.send("Node Server is running. Yay!!")
})


io.on('connection', socket => {

    //Get the chatID of the user and join in a room of the same name
    let chatId = socket.handshake.query.chatID
    console.log(chatId +" is Online")

    // socket.on('createRoom', currentUserID =>{
    //     console.log(currentUserID +" is Online")
    // })

    //join The Room
    socket.join(chatId)

    //Leave the room if the user closes the socket
    socket.on('disconnect', () => {
        socket.leave(chatId)
    })

    //Send message Event
    socket.on('send_message', message =>  {

        console.log(message)

        receiverChatID = message.receiverChatID
        senderChatID = message.senderChatID
        content = message.content

        //Send message to only that particular id
        socket.in(receiverChatID).emit('receive_message', {
            'content': content,
            'senderChatID': senderChatID,
            'receiverChatID': receiverChatID,
        })
    })
});

http.listen(5050, () => {
    console.log("Server is Running at port 5050")
})

此代码在模拟器中完美运行,并且无法在真实设备上运行......也没有显示错误日志......当我们在真实设备上运行它时,它甚至没有连接到套接字。

标签: node.jsflutterdartsocket.io

解决方案


推荐阅读