easy_udp 1.2.0

  • Readme
  • Changelog
  • Example
  • Installing
  • 70

Features #

  • receive Datagrams on demand without subscription.
  • receive timeout.
  • Various shorthand methods.

Usage #

usage example:

import 'dart:convert';
import 'package:easy_udp/easy_udp.dart';

start_server() async {
  // Create a EasyUDPSocket and bind to localhost:7777,
  // Note that you can also manually create a RawDatagramSocket 
  // and pass it to EasyUDPSocket(..) to create a EasyUDPSocket.
  final socket = await EasyUDPSocket.bind('localhost', 7777);

  while (true) {
    // Rather than subscribing to a stream of RawSocketEvents and
    // calling receive in the callback, which is the case when using
    // RawDatagramSocket, with EasyUDPSocket, you can get Datagram 
    // on demand with `receive` method.
    final datagram = await socket.receive();
    print('Server received: ${ascii.decode(datagram.data)} from ${datagram.port}');

    // use `sendBack` to send message to where a Datagram comes from.
    // This is a shorthand of:
    // socket.send(somedata, datagram.address, datagram.port);
    socket.sendBack(datagram, ascii.encode('pong'));
  }
}

start_client(int port) async {
  final socket = await EasyUDPSocket.bind('localhost', port);
  socket.send(ascii.encode('ping'), 'localhost', 7777);
  final resp = await socket.receive();
  print('Client $port received: ${ascii.decode(resp.data)}');

  // `close` method of EasyUDPSocket is awaitable.
  await socket.close();
  print('Client $port closed');
}

main() async {
  start_server();
  await Future.delayed(Duration(seconds: 1));
  start_client(8001);
  start_client(8002);
  start_client(8003);
}

// Output:
//
// Server received: ping from 8001
// Server received: ping from 8002
// Server received: ping from 8003
// Client 8001 received: pong
// Client 8002 received: pong
// Client 8003 received: pong
// Client 8001 closed
// Client 8002 closed
// Client 8003 closed

with timeout:

...
final datagram = await socket.receive(timeout: 1000);
if(datagram == null) {
  print('Receive timeout');
  continue;
}
...

// Output:
//
// Server received: ping from 8001
// Server received: ping from 8002
// Server received: ping from 8003
// Client 8001 received: pong
// Client 8002 received: pong
// Client 8003 received: pong
// Client 8001 closed
// Client 8002 closed
// Client 8003 closed
// Receive timeout
// Receive timeout
// Receive timeout
// Receive timeout

Features and bugs #

Please file feature requests and bugs at the issue tracker.

1.2.0 #

  • add explode option

1.1.0 #

  • add timeout feature

1.0.0 #

  • automatically do ns lookup in send

0.1.0+1 #

  • Update documentation

0.1.0 #

  • Initial version, created by Stagehand

example/easy_udp_example.dart

import 'dart:convert';
import 'package:easy_udp/easy_udp.dart';

start_server() async {
  // Create a EasyUDPSocket and bind to localhost:7777,
  // Note that you can also manually create a RawDatagramSocket 
  // and pass it to EasyUDPSocket(..) to create a EasyUDPSocket.
  final socket = await EasyUDPSocket.bind('localhost', 7777);

  while (true) {
    // Rather than subscribing to a stream of RawSocketEvents and
    // calling receive in the callback, which is the case when using
    // RawDatagramSocket, with EasyUDPSocket, you can get Datagram 
    // on demand with `receive` method.
    final datagram = await socket.receive(timeout: 1000);
    if(datagram == null) {
      print('Receive timeout');
      continue;
    }
    print('Server received: ${ascii.decode(datagram.data)} from ${datagram.port}');

    // use `sendBack` to send message to where a Datagram comes from.
    // This is a shorthand of:
    // socket.send(somedata, datagram.address, datagram.port);
    socket.sendBack(datagram, ascii.encode('pong'));
  }
}

start_client(int port) async {
  final socket = await EasyUDPSocket.bind('localhost', port);
  await socket.send(ascii.encode('ping'), 'localhost', 7777);
  final resp = await socket.receive();
  print('Client $port received: ${ascii.decode(resp.data)}');

  // `close` method of EasyUDPSocket is awaitable.
  await socket.close();
  print('Client $port closed');
}

main() async {
  start_server();
  await Future.delayed(Duration(seconds: 1));
  start_client(8001);
  start_client(8002);
  start_client(8003);
}

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  easy_udp: ^1.2.0

2. Install it

You can install packages from the command line:

with pub:


$ pub get

with Flutter:


$ flutter pub get

Alternatively, your editor might support pub get or flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:easy_udp/easy_udp.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
40
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
70
Learn more about scoring.

We analyzed this package on Oct 16, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.5.1
  • pana: 0.12.21

Platforms

Detected platforms: Flutter, other

Primary library: package:easy_udp/easy_udp.dart with components: io.

Health suggestions

Format lib/easy_udp.dart.

Run dartfmt to format lib/easy_udp.dart.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.2.0 <3.0.0
async ^2.3.0 2.4.0
Transitive dependencies
collection 1.14.12
Dev dependencies
pedantic ^1.0.0
test ^1.0.0