Flutter网络通信插件future_socket的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter网络通信插件future_socket的使用

在本教程中,我们将详细介绍如何使用 future_socket 插件进行网络通信。我们将分别展示客户端和服务端的使用示例。

客户端示例

客户端代码用于连接到服务器并读取指定数量的字节。

import 'dart:io';
import 'package:future_soket/future_soket.dart';

void main(List<String> arguments) async {
  // 创建一个 FutureSoket 实例
  final soket = FutureSoket();
  
  // 连接到服务器,参数分别为 IP 地址、端口号和超时时间
  await soket.connect(InternetAddress("127.0.0.1"), 8855, Duration(seconds: 1));

  // 从服务器读取 9 个字节
  final buf1 = await soket.read(9);
  
  // 从服务器读取 8 个字节
  final buf2 = await soket.read(8);
}

服务端示例

服务端代码用于监听特定端口,并处理来自客户端的连接请求。

import 'dart:io';
import 'package:future_soket/future_soket.dart';

void main(List<String> arguments) async {
  // 绑定到本地地址和端口
  final server = await ServerSocket.bind("127.0.0.1", 7777);
  
  // 监听传入的连接请求
  await for (var soket in server) {
    // 将标准 Socket 转换为 FutureSoket
    final fSoket = FutureSoket.fromSoket(soket);
    
    // 从客户端读取 55 个字节
    final buf1 = await fSoket.read(55);
  }
}

更多关于Flutter网络通信插件future_socket的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络通信插件future_socket的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用future_socket插件进行网络通信的示例代码。future_socket是一个允许Flutter应用通过TCP或UDP套接字进行网络通信的插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加future_socket依赖:

dependencies:
  flutter:
    sdk: flutter
  future_socket: ^x.y.z  # 请将x.y.z替换为最新的版本号

然后运行flutter pub get来获取依赖。

2. 使用TCP Socket

以下是一个简单的TCP客户端示例,它连接到服务器并发送和接收数据。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _response = 'Waiting for connection...';
  TCPSocket? _socket;

  @override
  void initState() {
    super.initState();
    _connectToServer();
  }

  Future<void> _connectToServer() async {
    try {
      _socket = await TCPSocket.connect('example.com', 8080);
      _socket!.listen(
        (Uint8List data) {
          setState(() {
            _response = String.fromCharCodes(data);
          });
        },
        onError: (error) {
          setState(() {
            _response = 'Error: $error';
          });
        },
        onDone: () {
          setState(() {
            _response = 'Connection closed';
          });
        },
      );

      // Send data to server
      _socket!.write(Uint8List.fromList('Hello Server!'.codeUnits));
    } catch (e) {
      setState(() {
        _response = 'Failed to connect: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('TCP Socket Example'),
        ),
        body: Center(
          child: Text(_response),
        ),
      ),
    );
  }

  @override
  void dispose() {
    _socket?.close();
    super.dispose();
  }
}

3. 使用UDP Socket

以下是一个简单的UDP客户端示例,它发送数据到服务器并等待响应。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _response = 'Waiting for response...';

  @override
  void initState() {
    super.initState();
    _sendUDPPacket();
  }

  Future<void> _sendUDPPacket() async {
    try {
      UDPSocket udpSocket = await UDPSocket.bind(InternetAddress.anyIPv4, 0);
      udpSocket.send(
        Uint8List.fromList('Hello UDP Server!'.codeUnits),
        InternetAddress.parse('example.com'),
        8080,
      );

      // Listen for responses
      udpSocket.listen((datagram) {
        var data = String.fromCharCodes(datagram.data);
        var remoteAddr = datagram.address.address;
        var remotePort = datagram.port;
        setState(() {
          _response = 'Received from $remoteAddr:$remotePort: $data';
        });
      }, onError: (error) {
        setState(() {
          _response = 'Error: $error';
        });
      });
    } catch (e) {
      setState(() {
        _response = 'Failed to send packet: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('UDP Socket Example'),
        ),
        body: Center(
          child: Text(_response),
        ),
      ),
    );
  }
}

注意事项

  1. 服务器地址和端口:确保你使用的服务器地址和端口是实际可访问的,并允许来自你的客户端的连接。
  2. 权限:在某些平台上(如Android和iOS),你可能需要在AndroidManifest.xmlInfo.plist中添加网络权限。
  3. 错误处理:在实际应用中,添加更多的错误处理和重试逻辑,以提高应用的健壮性。

以上示例展示了如何使用future_socket插件在Flutter中进行基本的TCP和UDP网络通信。希望这对你有所帮助!

回到顶部