当前位置: 首页 > 知识库问答 >
问题:

带有nodejs的Flutter套接字IO-连接时接收超时

章建木
2023-03-14

我正在使用flutter socket io与运行Node/Express的服务器通信。

服务器代码

var express = require('express');
var bodyParser = require('body-parser')
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var mongoose = require('mongoose');

app.use(express.static(__dirname));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}))

var Message = mongoose.model('Message',{
  name : String,
  message : String
})

app.get('/', (req, res) =>{
    res.send("Hello");

});

io.on('connection', () =>{
  console.log('a user is connected')
});

var server = http.listen(8080, "<MyServerIP>", () => {
  console.log('server is running on port', server.address().port);
});

我的扑动代码:

connect() async {
    try {
      
      String connectionPoint = "http://<MyServerIP>:8080";

      //Connect to Socket.IO
      socket = IO.io(
          connectionPoint,
          OptionBuilder()
              .setTransports(['websocket']) // for Flutter or Dart VM
              //.disableAutoConnect() // disable auto-connection
              //.setExtraHeaders({'id': tokenId}) // optional
              .build());

      //socket.connect();
      socket.onConnecting((data){
        print("Connecting");
      });

      

      socket.onConnectError((data) {
        
        print("Error Connecting - > $data");
        
        });

      socket.onConnectTimeout((data) => null);

      socket.onDisconnect((data) => null);

     
    } catch (e) {}
  }

当我尝试连接时,我会得到一个超时错误,该错误在OnConnectRetror中捕获。

节点服务器正在运行debian,我已经检查了防火墙状态:

To                         Action      From
--                         ------      ----
27017                      ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
3000                       ALLOW       Anywhere                  
22                         ALLOW       Anywhere                  
Samba                      ALLOW       Anywhere                  
8080                       ALLOW       Anywhere                  
27017 (v6)                 ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
3000 (v6)                  ALLOW       Anywhere (v6)             
22 (v6)                    ALLOW       Anywhere (v6)             
Samba (v6)                 ALLOW       Anywhere (v6)             
8080 (v6)                  ALLOW       Anywhere (v6)             

3000                       ALLOW OUT   Anywhere                  
3000 (v6)                  ALLOW OUT   Anywhere (v6)   

当我通过chrome打开url时,我得到的是“你好”信息。当我尝试netcat“NC-VZ MyServerIP8080时,我已经成功地连接了。我还检查了我的本地防火墙,并且我已经允许qemu到我的MyServerIp的所有连接。

只是需要一些帮助,以尝试找出为什么我得到超时,是否有任何方法来调试这个?

##编辑:MyServerIP是我的服务器的实际服务器ip。

共有1个答案

曾云
2023-03-14

(我没有足够的声誉来评论)你的控制台打印什么?它是否正在连接,如果是的话,它是否表示除了‘超时错误’以外的任何内容?

而且,看起来你的防火墙在端口8080上启用了IPv6通信,你提供的IP地址是IPv6吗?

 类似资料:
  • 问题内容: 我想将数据发送到服务器,然后等待一分钟,然后关闭套接字。 怎么做? 问题答案: 你可以试试看 根据您的情况更改套接字的超时!此代码将发送一条消息,然后等待接收消息,直到达到超时!

  • 在套接字最终接受另一端消失的情况下,什么指定了这个超时?是操作系统(Ubuntu 11.04),还是来自TCP/IP规范,还是套接字配置选项?

  • 问题内容: 调用一次后如何重新连接到套接字io ? 这是代码 如果我这样做,它会起作用。如果我这样做,它将断开连接。但是,如果我尝试使用重新连接,则连接不再起作用。我如何才能建立连接? 问题答案: 好吧,您可以在这里选择… 首次初始化套接字值时,应使用, 下次(调用一次断开连接后),您应使用再次连接。 所以你的应该是这样的

  • 在nodeJS应用程序中,我希望通过其UNIX套接字。我用这个包裹https://mongodb.github.io/node-mongodb-native/?jmp=docs(版本3.1.6),通过这种方式: 此处的文档中引用了URI:https://docs.mongodb.com/manual/reference/connection-string/#unix-域套接字。但在我的例子中,它失

  • 一些背景: 我有一个使用3G或4G数据连接的Android应用程序。但它也连接到一个wifi热点,以便在热点设备和应用程序之间传输一些数据。 我想做的是:创建一个到这个wifi热点的套接字连接,并通过这个套接字发送/接收数据。 我添加了以下代码,以确保我们在创建套接字时使用wifi热点wifi(否则它有时最终会使用数据连接): 这似乎没问题。但是,我在尝试连接到远程服务器地址时发现问题。下面是我正

  • Hi想知道是否有办法设置套接字的超时,以及在连接握手之前重试的次数。我在非常糟糕的连接模式下测试了我的应用程序,我为我在Volley中的请求设置了重试策略为10秒,但SSL握手似乎是个问题,因为它有一个默认的超时设置为60秒,而Volley超时只被触发当套接字由于尝试次数或超时而失败时。 下面是我的方法: 我正在使用截击来提出我的请求,我实现这一点的方法是: 我还尝试设置了这样的超时: