Flutter DTLS协议支持插件dart_tinydtls_libs的使用
Flutter DTLS协议支持插件dart_tinydtls_libs的使用
dart_tinydtls_libs
提供了tinyDTLS二进制文件,用于为Flutter应用程序添加DTLS支持。
使用方法
此库可以用来分发tinyDTLS二进制文件,这些文件可以在Flutter应用中被dart_tinydtls
客户端和服务端包装器使用。
该库仅包含预编译的动态库,可用于Linux、Android和Windows平台。更多关于如何使用此库的信息,请参见dart_tinydtls
文档。
安装
在你选择的终端中运行以下命令:
flutter pub add dart_tinydtls_libs
为了实际使用该库,还需要安装dart_tinydtls
,它提供了ffi绑定和围绕tinyDTLS的惯用包装器。
第三方代码
该库包含针对Linux、Android和Windows平台的tinyDTLS编译二进制文件。
更多信息请参见下一节。
许可证
与tinyDTLS C库的许可证匹配,本库既可以根据Eclipse公共许可证v1.0条款也可以根据3-Clause BSD许可证条款提供。 此外,tinyDTLS C库包含可能包含在与tinyDTLS链接的编译二进制文件中的第三方代码。 有关第三方代码及其许可证的信息,请参见: https://github.com/eclipse/tinydtls/blob/develop/ABOUT.md 有关tinyDTLS许可条款的更多信息,请参见: https://github.com/eclipse/tinydtls/blob/develop/LICENSE 有关EPL 1.0的更多信息,请参见: https://www.eclipse.org/legal/eplfaq.php
注意:该库不受Eclipse基金会的支持或认可。
维护者
该项目目前由以下开发者维护:
姓名 | 邮箱地址 | GitHub用户名 |
---|---|---|
Jan Romann | jan.romann@uni-bremen.de | JKRhb |
Falko Galperin | falko1@uni-bremen.de | falko17 |
示例代码
以下是一个简单的示例,展示了如何使用dart_tinydtls_libs
和dart_tinydtls
插件来创建一个带有DTLS支持的Flutter应用。
// Copyright 2022 The NAMIB Project Developers. All rights reserved.
// See the README as well as the LICENSE file for more information.
//
// SPDX-License-Identifier: EPL-1.0 OR BSD-3-CLAUSE
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:dart_tinydtls/dart_tinydtls.dart';
import 'package:flutter/material.dart';
final random = Random();
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _responseCounter = 0;
String? _response = "No Response";
bool _sending = false;
// FIXME(JKRhb): 在多次交换后,tinyDTLS遇到了一些错误。
// 因此,此示例应被视为当前的一个概念证明,但在后续版本中会修复。
void _sendRequest() async {
setState(() {
_sending = true;
});
const address = "::1"; // IPv6 localhost
final port = random.nextInt(1 << 16); // 生成一个随机端口
// 创建服务器
final server = await DtlsServer.bind(InternetAddress.anyIPv6, port,
keyStore: {"Client_identity": "secretPSK"}); // 使用预共享密钥(PSK)
server.listen((connection) {
connection.listen((event) {
setState(() {
_responseCounter++;
});
final response =
"${utf8.decode(event.data)} Response $_responseCounter";
connection.send(utf8.encode(response)); // 发送响应
});
});
// 创建客户端
final client = await DtlsClient.bind(InternetAddress.anyIPv6, 0);
final pskCredentials = PskCredentials("Client_identity", "secretPSK"); // 配置PSK认证
final connection = await client.connect(InternetAddress(address), port,
pskCredentials: pskCredentials, eventListener: (event) {
if (event == DtlsEvent.dtlsEventCloseNotify) {
client.close(); // 关闭连接
}
});
connection
..listen((event) {
server.close(); // 关闭服务器
setState(() {
_response = utf8.decode(event.data); // 更新响应文本
});
})
..send(utf8.encode('Hello World')); // 发送请求消息
_sending = false;
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Text('Request counter: $_responseCounter\n'
'Response: $_response'), // 显示请求计数器和响应信息
),
floatingActionButton: IconButton(
onPressed: !_sending ? _sendRequest : null, // 控制按钮是否可用
icon: const Icon(Icons.send)), // 发送按钮图标
),
);
}
}
更多关于Flutter DTLS协议支持插件dart_tinydtls_libs的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter DTLS协议支持插件dart_tinydtls_libs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,如果你想使用 DTLS(Datagram Transport Layer Security)协议,可以通过使用 dart_tinydtls_libs
插件来实现。这个小型的库提供了对 DTLS 的支持,允许你在 Dart 中处理 DTLS 加密的 UDP 通信。
以下是使用 dart_tinydtls_libs
插件的基本步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 dart_tinydtls_libs
依赖:
dependencies:
flutter:
sdk: flutter
dart_tinydtls_libs: ^0.1.0 # 使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 使用 dart_tinydtls_libs
dart_tinydtls_libs
是一个底层的库,它提供了对 DTLS 的基本支持。你可以使用它来创建 DTLS 客户端或服务器。
示例:创建 DTLS 客户端
import 'dart:io';
import 'package:dart_tinydtls_libs/dart_tinydtls_libs.dart';
void main() async {
// 初始化 DTLS 库
initializeTinyDTLS();
// 创建一个 UDP 套接字
var socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0);
// 创建 DTLS 客户端
var dtls = DTLSClient(
socket: socket,
host: 'example.com',
port: 5684,
psk: 'your-pre-shared-key',
identity: 'client-id',
);
// 连接到服务器
await dtls.connect();
// 发送数据
dtls.send('Hello DTLS Server!'.codeUnits);
// 接收数据
socket.listen((event) {
if (event == RawSocketEvent.read) {
var datagram = socket.receive();
if (datagram != null) {
print('Received: ${String.fromCharCodes(datagram.data)}');
}
}
});
// 关闭连接
await dtls.close();
}
示例:创建 DTLS 服务器
import 'dart:io';
import 'package:dart_tinydtls_libs/dart_tinydtls_libs.dart';
void main() async {
// 初始化 DTLS 库
initializeTinyDTLS();
// 创建一个 UDP 套接字
var socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 5684);
// 创建 DTLS 服务器
var dtls = DTLSServer(
socket: socket,
psk: 'your-pre-shared-key',
identity: 'server-id',
);
// 监听连接
dtls.listen((client) {
print('New DTLS client connected: ${client.remoteAddress.address}:${client.remotePort}');
// 接收数据
client.listen((data) {
print('Received from client: ${String.fromCharCodes(data)}');
// 发送响应
client.send('Hello DTLS Client!'.codeUnits);
}, onDone: () {
print('Client disconnected');
});
});
// 关闭服务器
await dtls.close();
}