Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何处理颤振中插座的连接状态?_Flutter_Sockets_Dart_Tcp - Fatal编程技术网

Flutter 如何处理颤振中插座的连接状态?

Flutter 如何处理颤振中插座的连接状态?,flutter,sockets,dart,tcp,Flutter,Sockets,Dart,Tcp,我正在构建一个应用程序,需要连接到视频会议设备才能发送呼叫命令 我的问题出现在设备因断电、电缆断开或任何其他问题而断开连接时。在这种情况下,由于vcfConnected变量,我能够在应用程序中显示它。但是,我永远无法让连接恢复工作(只需重新启动应用程序,这是不可取的) 我通过dart插座连接到设备,如下所示。此实现背后的思想是在出现问题时尝试重新连接。然而,这种方法并不奏效 有人知道如何更好地处理连接状态吗 每次我必须发送命令并关闭套接字时,连接到设备是否更好 void connect(){

我正在构建一个应用程序,需要连接到视频会议设备才能发送呼叫命令

我的问题出现在设备因断电、电缆断开或任何其他问题而断开连接时。在这种情况下,由于
vcfConnected
变量,我能够在应用程序中显示它。但是,我永远无法让连接恢复工作(只需重新启动应用程序,这是不可取的)

我通过dart插座连接到设备,如下所示。此实现背后的思想是在出现问题时尝试重新连接。然而,这种方法并不奏效

有人知道如何更好地处理连接状态吗

每次我必须发送命令并关闭套接字时,连接到设备是否更好

void connect(){
  Socket.connect('192.168.5.107', 55003).then((Socket socket) {
    sock = socket;
    vcfConnected = true;
    socket.listen((data) {
      String response = hex.encode(data);
      dataHandler(context, response);
    },
        onError: (error) => errorHandler(error),
        onDone: () => reconnect()
    );
    // Init protocol message
    sendCommand('&IPV');

    getMicMuteState();
    getReceiveVolume();

    timer = Timer.periodic(Duration(seconds: 10), (Timer t) => checkVcfStatus());
  }).timeout(Duration(seconds: 15), onTimeout: () => onTimeout());

}

FutureOr<Null> onTimeout(){
  reconnect();
}

void reconnect(){
  print('VCF disconnected');
  vcfConnected = false;
  if (timer != null){
    timer.cancel();
  }
  if (sock != null) {
    sock.close();
  }
  sock = null;
  connect();
}

void errorHandler(, error){
  print('Error: $error');
  reconnect();
}

void checkVcfStatus() {
  sendCommand('?S');
}
void connect(){
连接('192.168.5.107',55003)。然后((套接字){
插座=插座;
vcfConnected=true;
socket.listen((数据){
字符串响应=十六进制编码(数据);
dataHandler(上下文、响应);
},
onError:(error)=>errorHandler(error),
onDone:()=>重新连接()
);
//初始化协议消息
sendCommand(“&IPV”);
getMicMuteState();
getReceiveVolume();
timer=timer.periodic(持续时间(秒:10),(timer t)=>checkVcfStatus());
}).超时(持续时间(秒数:15),onTimeout:()=>onTimeout());
}
FutureOr onTimeout(){
重新连接();
}
void重新连接(){
打印(“VCF断开”);
vcfConnected=false;
如果(计时器!=null){
timer.cancel();
}
if(sock!=null){
sock.close();
}
sock=null;
connect();
}
void errorHandler(,错误){
打印('Error:$Error');
重新连接();
}
无效检查vcfstatus(){
sendCommand('S');
}

@jsgalarrega你找到解决方案了吗?@seyedaliAghamali没有…@jsgalarrega你找到解决方案了吗?@seyedaliAghamali没有。。。