start method
Implementation
Future<void> start() async {
try {
if(_port is int){
}else if(_port is String){
final portList = (_port as String).split('-').map((e) => int.tryParse(e.trim())).whereType<int>().toList();
if(portList.length != 2){
throw ArgumentError('Port must be an int or a String[e.g. 8001-8003]');
}
final leastPort = min(portList[0], portList[1]);
final maxPort = max(portList[0], portList[1]);
for(int tmpPort= leastPort; tmpPort <= maxPort; tmpPort++){
if(!await Utils.isPortInUse(tmpPort, address: _host)){
_port = tmpPort;
break;
}
}
}else{
throw ArgumentError('Port must be an int or a String[e.g. 8001-8003]');
}
_server = await ServerSocket.bind(_host, _port as int);
_isRunning = true;
_logger.i('代理服务端已启动:$_host:$_port');
} catch (e) {
_logger.e('服务端启动失败', error: e);
rethrow;
}
_server.listen(
(clientSocket){
_logger.i('接收到新连接:${clientSocket.remoteAddress}:${clientSocket.remotePort}');
_handleClient(clientSocket); // 处理单个客户端请求
},
onError: (error){
_logger.e('本地服务端数据处理异常',error: error);
},
onDone: () => stop(),
);
}