0
0

Node.jsでTCP通信する簡易クライアントとサーバを作ってみた

Posted at

はじめに

JavaScriptアプリケーションで簡易的にサーバに接続して状況確認する機能を実装できるか検討する必要があり、調査したところNode.jsのnetライブラリを使用することで実現できそうなことが分かった。
しかし、サンプルコード等を調べてみるとクライアントとサーバ間で複数回会話するものはなかった。
そこで、試行錯誤して開発してみた。

サンプルコード

サーバアプリケーションとクライアントアプリケーションを開発した。

サーバアプリケーション

サーバアプリケーション
const net = require('net');

const sever = net.createServer(socket =>{
    socket.on('data', data => {
        console.log(data + ' from ' + socket.remoteAddress + ":" + socket.remotePort);
        socket.write('Echo: ' + data);
    });
    socket.on('close', () =>{
        console.log('Client closed connection');
    });
}).listen(3000);

console.log('Listening port is 3000');

サーバアプリケーションは、クライアントから送られたメッセージの先頭に「Echo:」を付けて返却するECHOサーバとなっている。
クライアントからの待ち受けポートは3000番としている。

クライアントアプリケーション

クライアントアプリケーション
const { write } = require('fs');
const net = require('net');

let i = 0;

const client = net.connect('3000', 'localhost', ()=>{
    console.log('connected to server');
    client.write('Hello Server!');
    i++
});

client.on('data', data => {
    console.log('Received: ' + data)

    if(~data.indexOf("!")){
        console.log("continue")
        sendMessage(data)
    }else{
        console.log("break")
        client.end()
    }
    
});

function sendMessage(data) {
    switch(i){
        case 1:
            client.write("second")
            i++
            break;
        case 2:
            client.write("See you")
            i++
            break;
        default:
            client.end()
    }
    return 0
}


client.on('end', () =>{
    client.destroy();
});

client.on('close', () => {
    console.log('Connection is closed')
});

サーバへメッセージ送信した回数をカウントアップして、回数によって送信するメッセージを変えている。
サーバから受信したメッセージの内容を受けて、メッセージを返すようにしている。
サーバから返ってきたメッセージの中に「!」が含まれていない場合は、サーバとの通信を切るようにした。
そのため、サンプルコードは2回目のメッセージを受信したところで通信を終了するようになっている。

実行結果のログは、次のようになる。

サーバ側
$ node app.js
Listening port is 3000
Hello Server! from ::1:{$YOUR PORT}
second from ::1:{$YOUR PORT}
Client closed connection
クライアント側
$ node app.js
connected to server
Received: Echo: Hello Server!
continue
Received: Echo: second
break
Connection is closed

リポジトリ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0