【问题标题】:Flutter socket.io client not connecting with node.js socket.io server via httpsFlutter socket.io 客户端未通过 https 与 node.js socket.io 服务器连接
【发布时间】:2021-11-18 09:24:06
【问题描述】:

我正在尝试通过 https 将 Flutter socket.io 客户端连接到 node.js socket.io 客户端,但这没有发生。通过浏览器,我可以建立连接并在移动设备中使用 http,但由于某种原因切换到 https 不起作用。

以下是我的 node.js 服务器端代码。

var fs = require('fs');
var https = require('https');

var express = require('express');
var app = express();

var options = {
  key: fs.readFileSync('./file.pem'),
  cert: fs.readFileSync('./file.crt')
};
var serverPort = 3000;

var server = https.createServer(options, app);
var io = require('socket.io')(server);

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

io.on('connection', function(socket) {
  console.log('new connection');
  socket.emit('message', 'This is a message from the dark side.');
});

server.listen(serverPort, function() {
  console.log('server up and running at %s port', serverPort);
});

这是代码的颤振方面。

import 'package:flutter/material.dart';
import 'package:socket_io_client/socket_io_client.dart';

class TestSocket extends StatefulWidget {
  const TestSocket({Key? key}) : super(key: key);

  @override
  _TestSocketState createState() => _TestSocketState();
}

class _TestSocketState extends State<TestSocket> {
  late Socket socket;
  @override
  void initState() {
    super.initState();
    socketServer();
  }

  // Socket Connection
  void socketServer() {
      try {
            // Configure socket transports
      socket = io('https://<localhost>:3000', <String, dynamic>{
        'transpose': ['websocket'],
        'autoConnect': false
      });

      // Connect to websocket
      socket.connect();

      // Handle socket events
      socket.on('connection', (_) => print("Connected with ${socket.id}"));

    } catch (e) {
      print('The error is ${e.toString}');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

我正在使用带有 node.js 和 socket_io_client 的 socket.io 版本“^2.4.1”:带有 Flutter 的 ^1.0.1。

【问题讨论】:

  • 您找到解决方案了吗?我现在也有同样的问题。

标签: node.js flutter websocket https socket.io


【解决方案1】:

尝试将此添加到 main.dart 文件中,请不要使用“localhost” -> 1.1.1.1:3000 更好

https://github.com/SelimhanBek/flutter-socket-io-demo这个在https和http端工作的示例,希望有用...

// Security Policy ...
class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(MyApp());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多