2021年1月28日星期四

Flutter with Socket.io

I have tried to use socket.io with flutter. But I get the following error.

D/FlutterSocketIoPlugin: SocketIO( 6279): reconnect_attempt: [108]  D/FlutterSocketIoPlugin: SocketIO( 6279): reconnecting: [108]  D/FlutterSocketIoPlugin: SocketIO( 6279): connect_error: [{"cause":{"detailMessage":"CLEARTEXT communication to 10.0.2.2 not permitted by network security policy","stackTrace":[],"suppressedExceptions":[]},"detailMessage":"websocket error","stackTrace":[],"suppressedExceptions":[]}]  

I wrote the server using nodejs.

const express = require('express');  const http = require('http');  const socketio = require('socket.io');  const { Socket } = require('dgram');  const formatMessage = require('./utils/messages');  const {userJoin, getCurrentUser, userLeave, getRoomUsers} = require('./utils/users');    const app = express();  const server = http.createServer(app);  const io = socketio(server);    const botName = 'ChatCordBot';    //run when client connects  io.on('connection', socket=>{        socket.on('joinroom',({username, room})=>{            const user = userJoin(socket.id, username, room);            socket.join(user.room);            socket.emit('message',formatMessage(botName,'Welcome to chatcord!'));            //broadcast          socket.broadcast.to(user.room).emit('message',formatMessage(botName,`${user.username} has joined`));            //send users and room info          io.to(user.room).emit('roomusers',{              room:user.room,              users:getRoomUsers(user.room)          });      });         // Listen for chatMessage      socket.on('chatMessage', msg => {          // const user = getCurrentUser(socket.id);            // io.to(user.room).emit('message', formatMessage(user.username, msg));          console.log(msg);      });        //runs when client disconnects      socket.on('disconnect',()=>{            const user = userLeave(socket.id);            if(user){              io.to(user.room).emit('message',formatMessage(botName,`${user.username} has left the chat`));                //send users and room info              io.to(user.room).emit('roomusers',{                  room:user.room,                  users:getRoomUsers(user.room)              });          }      });  });    const PORT = 3000;    server.listen(PORT,()=>{console.log(`Listening to ${PORT}`)});  

Here is part of the client side where I used socket.io.

import 'package:flutter_socket_io/flutter_socket_io.dart';  import 'package:flutter_socket_io/socket_io_manager.dart';      class Body extends StatefulWidget {    const Body({      Key key,    }) : super(key: key);      @override    _BodyState createState() => _BodyState();  }    class _BodyState extends State<Body> {    SocketIO socketIO;    @override    // ignore: must_call_super    void initState(){      initSocketIO();    }      initSocketIO(){      socketIO = SocketIOManager().createSocketIO('http://10.0.2.2:3000', '/');      socketIO.init();        socketIO.subscribe('chatMessage', getMessage);        socketIO.connect();      }      getMessage(){      if(socketIO != null){        print("socket is not null");      }    }  

I'm running my flutter app using the android emulator in android stuudio. Is that the cause for the error? Or is there some error in my code?

https://stackoverflow.com/questions/65942553/flutter-with-socket-io January 29, 2021 at 01:48AM

没有评论:

发表评论