client_server_lan 3.0.1
client_server_lan: ^3.0.1 copied to clipboard

A simple to use LAN communication package. The Server and a Client can freely distribute data over LAN.

client_server_lan #

Pub Documentation

A LAN communication Flutter package based off Node Commander but removing parts such as Commander Nodes and making communication between client and server two way.

Usage #

Add to android files #

In android/app/AndroidManifest

<application ...
  android:networkSecurityConfig="@xml/network_security_config" >

 <meta-data android:name="io.flutter.network-policy"
        android:resource="@xml/network_security_config"/>

Then create a folder xml inside create a file: network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <base-config cleartextTrafficPermitted="true">
     <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
  </base-config>
 </network-security-config>

Run a Node #

Start a Server Node

import 'dart:async';
import 'package:client_server_lan/client_server_lan.dart';
ServerNode server;
void startServer() async {
    server = ServerNode(
      name: "server_name",//any text name
      verbose: true,//output for debugging purposes
      onDispose: onDispose,//function run on server disposed
      clientDispose: clientDispose,//function run on client dispose
    );
    await server.init();
    await server.onReady;
    setState(() {
      serverStatus = "Server ready on ${server.host}:${server.port}";
    });
    server.dataResponse.listen((DataPacket data) {
      setState(() {
        String dataReceived = data.payload;
      });
    });

Start a Client Node

import 'dart:async';
import 'package:client_server_lan/client_server_lan.dart';
ClientNode client;
void startClient() async {
    client = ClientNode(
      name: clientName,//any text name
      verbose: true,//output for debugging purposes
      onDispose: onDispose,//function run on client dispose
    );
    await client.init();
    await client.onReady;
    setState(() {
      clientStatus = "Client ready on ${client.host}:${client.port}";
    });
    client.dataResponse.listen((DataPacket data) {
      setState(() {
        String dataReceived = data.payload;
      });
    });
  }

Server scan for Clients

void findClients() async {
    server.discoverNodes();
    await Future<Object>.delayed(const Duration(seconds: 2));
    //outputs client names and IPs (not neccessary)
    setState(() {
      clientIPs = "";
    });
    for (final s in server.clientsConnected) {
      setState(() {
        clientIPs += "id=${s.name},IP=${s.address}\n";
      });
    }
  }

Transfer Data #

WARNING: Data not excepted with titles in client.internalTitles/server.internalTitles

Transfer from Client to Server

void clientToServer(String dataToSend) async {
    await client.sendData(dataToSend, "userInfo");
  }

Transfer from Server to Client

void serverToClient(String dataToSend, String clientName) async {
    final String client = server.clientUri(clientName);
    await server.sendData(dataToSend, "userInfo", client);
  }

Example #

New Example app courtesy of Fikrirazzaq

Example

6
likes
100
pub points
51%
popularity

A simple to use LAN communication package. The Server and a Client can freely distribute data over LAN.

Repository (GitHub)
View/report issues

Documentation

API reference

Uploader

robert.aries1@gmail.com

License

MIT (LICENSE)

Dependencies

dio, emodebug, flutter, get_ip, isohttpd, meta

More

Packages that depend on client_server_lan