blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

DartでSocket通信

概要

DartでSocket通信の例。

test.dart

テスト用なので、プロセス内でサーバとクライアントを立てます。 サーバはオウム返しをするだけで、 クライアントは標準入力からのデータをサーバに投げて、 サーバから受け取ったデータを標準出力に吐き出します。

import "dart:io";
import "dart:async";
const int PORT = 60000;

void server() {
  Future<ServerSocket> fss = ServerSocket.bind(InternetAddress.ANY_IP_V4, PORT);
  fss.then((ServerSocket ss) {
    ss.listen((Socket s) => s.listen((List<int> data) => s.add(data)));
  });
}

void client() {
  Future<Socket> fs = Socket.connect(InternetAddress.LOOPBACK_IP_V4, PORT);
  fs.then((Socket s) {
    stdin.listen((List<int> data) => s.add(data));
    s.listen((List<int> data) => stdout.write(new String.fromCharCodes(data)));
  });
}

void main() {
  server();
  client();
}

実行

実行してみると、挙動はcatみたいになると思いますが、内部ではSocket通信が使われてます。 めちゃくちゃ無駄です。

$ dart test.dart
hoge
hoge