nodejs

nodejsでTCPサーバ

October 19, 2012

2 min read

mitsuruogMitsuru Ogawa

nodejs は http の Web サーバだけではなく、TCP や UDP サーバも少ない行数で作ることができます。 今回はコマンドプロンプトを使った対話型の TCP サーバを作ってみました。

普通に http サーバいつも書いている人であれば、そんなに難しいところはないと思います。 3000 ポートで listen させてます。

サーバ側

var net = require("net");

var server = net
  .createServer(function (conn) {
    console.log("server-> tcp server created");

    conn.on("data", function (data) {
      console.log(
        "server-> " +
          data +
          " from " +
          conn.remoteAddress +
          ":" +
          conn.remotePort
      );
      conn.write("server -> Repeating: " + data);
    });
    conn.on("close", function () {
      console.log("server-> client closed connection");
    });
  })
  .listen(3000);

console.log("listening on port 3000");

クライアント側

var net = require("net");

var client = new net.Socket();
client.setEncoding("utf8");

client.connect("3000", "localhost", function () {
  console.log("client-> connected to server");
  client.write("Who needs a browser to communicate?");
});

process.stdin.resume();

process.stdin.on("data", function (data) {
  client.write(data);
});

client.on("data", function (data) {
  console.log("client-> " + data);
});

client.on("close", function () {
  console.log("client-> connection is closed");
});

実行すると次のようにコマンドプロンプトに表示されます。

At Server
------------------------------------------------------
listening on port 3000
server-> tcp server created
server-> Who needs a browser to communicate? from 127.0.0.1:51196
server-> hoehoe
 from 127.0.0.1:51196
server-> Hello!
 from 127.0.0.1:51196

server-> client closed connection(←クライアントからの切断)



At Client
------------------------------------------------------
client-> connected to server
client-> server -> Repeating: Who needs a browser to communicate?
hoehoe(←コマンドプロンプトからの入力)
client-> server -> Repeating: hoehoe

Hello!(←コマンドプロンプトからの入力)
client-> server -> Repeating: Hello!

client-> connection is closed(←サーバからの切断)

nodejs で作ると簡単ですね。