Javascript 我的应用程序未连接到Flatter中的socketIO后端服务器
我正在尝试使用Javascript 我的应用程序未连接到Flatter中的socketIO后端服务器,javascript,android,flutter,sockets,socket.io,Javascript,Android,Flutter,Sockets,Socket.io,我正在尝试使用socketIO作为我的应用程序的后端。我为相同的文件创建了一个文件server.js。我正在从一个教程中学习使用它,它对他有用,但对我不起作用。我甚至复制了整个代码,但这并不奏效。我提供了server.js的代码和用于此的颤振代码- 在我的UI上,它仍然显示“正在连接…”,而不是任何错误或“已连接”,我认为这是因为它显示的是初始化值(在initState()中初始化),而没有运行或发生任何其他事情 在39:12检查一下,我要完成 server.js文件- var express
socketIO
作为我的应用程序的后端。我为相同的文件创建了一个文件server.js
。我正在从一个教程中学习使用它,它对他有用,但对我不起作用。我甚至复制了整个代码,但这并不奏效。我提供了server.js
的代码和用于此的颤振代码-
在我的UI上,它仍然显示“正在连接…”,而不是任何错误或“已连接”,我认为这是因为它显示的是初始化值(在initState()中初始化),而没有运行或发生任何其他事情
在39:12检查一下,我要完成
server.js
文件-
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var ios = require('socket.io')(server);
let ON_CONNECTION = 'connection';
let On_DISCONNECT = 'disconnet';
let EVENT_IS_USER_ONLINE = 'check_online';
let EVENT_SINGLE_CHAT_MESSAGE = 'single_chat_message';
let SUB_EVENT_RECIEVE_MESSAGE = 'recieve_message';
let SUB_EVENT_IS_USER_CONNECTED = 'is_user_connected';
let STATUS_MESSAGE_NOT_SENT = 1001;
let STATUS_MESSAGE_SENT = 1002;
let listen_port = 6000;
server.listen(listen_port);
const userMap = new Map();
ios.sockets.on(ON_CONNECTION, function (socket) {
onEachUserConnection(socket);
});
function onEachUserConnection(socket) {
print('------------');
print('Connected => Socket ID: '+socket.id+', User: '+ stringifyToJson(socket.handshake.query));
}
function print(txt) {
console.log(txt);
}
function stringifyToJson(data) {
return JSON.stringify(data);
}
短发-
import 'dart:io';
import 'user.dart';
import 'package:adhara_socket_io/adhara_socket_io.dart';
class SocketUtils {
static String serverIP = Platform.isIOS ? 'http://localhost' : 'http://10.0.2.2';
static const int SERVER_PORT=6000;
static String _connectUrl = '$serverIP:$SERVER_PORT';
static const String _ON_MESSAGE_RECEIVED = 'receive_message';
static const String _IS_USER_ONLINE_EVENT = 'check_online';
static const int STATUS_MESSAGE_NOT_SENT = 10001;
static const int STATUS_MESSAGE_SENT = 10002;
static const String SINGLE_CHAT = 'single_chat';
User _fromUser;
SocketIO _socket;
SocketIOManager _manager;
initSocket(User fromUser) async {
this._fromUser = fromUser;
print('Connecting... ${fromUser.name}');
await init();
}
init() async {
_manager=SocketIOManager();
_socket= await _manager.createInstance(_socketOptions());
}
connectToSocket() {
if(_socket==null) {
print("Socket is null");
return;
}
_socket.connect();
}
_socketOptions() {
final Map<String, String> userMap = {
'from': _fromUser.id.toString(),
};
return SocketOptions(_connectUrl,enableLogging: true, transports: [Transports.webSocket], query: userMap);
}
setOnConnectListener(Function onConnect) {
_socket.onConnect.listen((data) {
onConnect(data);
});
}
setOnConnectionTimeOutListener(Function onConnectionTimeout) {
_socket.onConnectTimeout.listen((data) {
onConnectionTimeout(data);
});
}
setOnConnectionErrorListener(Function onConnectionError) {
_socket.onConnectError.listen((data) {
onConnectionError(data);
});
}
setOnErrorListener(Function onError) {
_socket.onError.listen((data) {
onError(data);
});
}
setOnDisconnectListener(Function onDisconnect) {
_socket.onDisconnect.listen((data) {
onDisconnect(data);
});
}
_closeConnection() {
if(null!=_socket) {
print("Closing Connection");
_manager.clearInstance(_socket);
}
}
}
静态字符串serverIP=Platform.isIOS?“http://localhost' : 'http://10.0.2.2';
在文章开始时,您还没有告知服务器运行的位置。也不知道你的应用程序在哪里运行。
import 'package:flutter/material.dart';
import 'package:flutter_chat_app/socketIO_chat/chat_screen.dart';
import 'package:flutter_chat_app/socketIO_chat/global.dart';
import 'package:flutter_chat_app/socketIO_chat/login_screen.dart';
import 'package:flutter_chat_app/socketIO_chat/user.dart';
class ChatUsersScreen extends StatefulWidget {
ChatUsersScreen() : super();
static const String ROUTE_ID='chat_users_screen';
@override
_ChatUsersScreenState createState() => _ChatUsersScreenState();
}
class _ChatUsersScreenState extends State<ChatUsersScreen> {
List<User> _chatUsers;
bool _connectedToSocket;
String _connectMessage;
_openChatScreen(context) async {
await Navigator.pushNamed(context, ChatScreen.ROUTE_ID);
}
_connectToSocket() async {
print('Connecting Logged In User ${G.loggedInUser.name}, ${G.loggedInUser.id}');
G.initSocket();
await G.socketUtils.initSocket(G.loggedInUser);
G.socketUtils.connectToSocket();
G.socketUtils.setOnConnectListener(onConnect);
G.socketUtils.setOnConnectionErrorListener(onConnectionError);
G.socketUtils.setOnConnectionTimeOutListener(onConnectionTimeout);
G.socketUtils.setOnDisconnectListener(onDisconnect);
G.socketUtils.setOnErrorListener(onError);
}
onConnect(data) {
print('Connected $data');
setState(() {
_connectedToSocket=true;
_connectMessage="Message";
});
}
onConnectionError(data) {
print('OnConnectionError $data');
setState(() {
_connectedToSocket=false;
_connectMessage="Connection Error";
});
}
onConnectionTimeout(data) {
print('OnConnectionTimeOut $data');
setState(() {
_connectedToSocket=false;
_connectMessage="Connection Time Out";
});
}
onDisconnect(data) {
print('OnDisconnect $data');
setState(() {
_connectedToSocket=false;
_connectMessage="Disconnected";
});
}
onError(data) {
print('OnError $data');
setState(() {
_connectedToSocket=false;
_connectMessage="Connection Error";
});
}
_openLoginScreen(context) async {
await Navigator.pushReplacementNamed(context, LoginScreen.ROUTE_ID);
}
@override
void initState() {
// TODO: implement initState
super.initState();
_connectedToSocket=false;
_connectMessage="Connecting";
_chatUsers=G.getUsersFor(G.loggedInUser);
_connectToSocket();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(
child: Text(
"Chat Users",
),
),
actions: [
IconButton(
icon: Icon(
Icons.close
),
onPressed: () {
_openLoginScreen(context);
},
),
],
),
body: Container(
alignment: Alignment.center,
padding: EdgeInsets.all(30.0),
child: Column(
children: [
Text(
_connectedToSocket ? 'Connected' : _connectMessage,
),
Expanded(
child: ListView.builder(
itemCount: _chatUsers.length,
itemBuilder: (context, index) {
User user = _chatUsers[index];
return ListTile(
onTap: () {
G.toChatUser=user;
_openChatScreen(context);
},
title: Text(user.name),
subtitle: Text('ID ${user.id} Email ${user.email}'),
);
},
),
),
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_chat_app/socketIO_chat/chat_message_model.dart';
import 'package:flutter_chat_app/socketIO_chat/chat_title.dart';
import 'package:flutter_chat_app/socketIO_chat/global.dart';
import 'package:flutter_chat_app/socketIO_chat/user.dart';
class ChatScreen extends StatefulWidget {
ChatScreen() : super();
static const String ROUTE_ID='chat_screen';
@override
_ChatScreenState createState() => _ChatScreenState();
}
class _ChatScreenState extends State<ChatScreen> {
List<ChatMessageModel> _chatMessages;
User _toChatUser;
UserOnlineStatus _userOnlineStatus;
@override
void initState() {
// TODO: implement initState
super.initState();
_chatMessages=[];
_toChatUser=G.toChatUser;
_userOnlineStatus=UserOnlineStatus.connecting;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(
child: ChatTitle(toChatUser: _toChatUser, userOnlineStatus: _userOnlineStatus,),
),
),
body: Container(
alignment: Alignment.center,
padding: EdgeInsets.all(30.0),
child: Column(
children: [
Expanded(
child: ListView.builder(
itemCount: _chatMessages.length,
itemBuilder: (context, index) {
ChatMessageModel _chatMessageModel = _chatMessages[index];
return Text(
_chatMessageModel.message,
);
},
),
),
_bottomChatArea(),
],
),
),
);
}
_bottomChatArea() {
return Container(
padding: EdgeInsets.all(10.0),
child: Row(
children: [
_chatTextArea(),
IconButton(
icon: Icon(
Icons.send,
),
onPressed: () {
},
),
],
),
);
}
_chatTextArea() {
return Expanded(
child: TextField(
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
),
filled: true,
fillColor: Colors.white,
contentPadding: EdgeInsets.all(10.0),
hintText: "Type Message",
),
),
);
}
}
I/flutter ( 5213): Connecting Logged In User A, 1000
I/flutter ( 5213): Connecting... A
E/Adhara:SocketIOPlugin( 5213): Clearing instances
E/Adhara:SocketIOPlugin( 5213): Creating a new instance
D/Adhara:Socket( 5213): Creating socket with URL: http://10.0.2.2:6000
D/Adhara:Socket( 5213): Connecting to socket http://10.0.2.2:6000
W/lutter_chat_ap( 5213): Accessing hidden method Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (greylist,core-platform-api, reflection, allowed)
W/lutter_chat_ap( 5213): Accessing hidden method Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V (greylist,core-platform-api, reflection, allowed)
W/lutter_chat_ap( 5213): Accessing hidden method Ldalvik/system/CloseGuard;->warnIfOpen()V (greylist,core-platform-api, reflection, allowed)
I/lutter_chat_ap( 5213): Thread[6,tid=5230,WaitingInMainSignalCatcherLoop,Thread*=0xe9400e10,peer=0x12fc1658,"Signal Catcher"]: reacting to signal 3
I/lutter_chat_ap( 5213):
I/lutter_chat_ap( 5213): Wrote stack traces to tombstoned