{"id":793,"date":"2021-04-12T04:41:50","date_gmt":"2021-04-11T21:41:50","guid":{"rendered":"https:\/\/bigdolphin.com.vn\/?p=793"},"modified":"2024-03-26T15:26:44","modified_gmt":"2024-03-26T08:26:44","slug":"tcp-ip-client-server-using-nodejs","status":"publish","type":"post","link":"https:\/\/bigdolphin.com.vn\/?p=793","title":{"rendered":"Simple TCP\/IP Client &#8211; Server Applications using NodeJS"},"content":{"rendered":"\n<p><strong>TCP\/IP<\/strong> (Transmission Control Protocol over Internet Protocol)&nbsp;is&nbsp;a most basic&nbsp;client &#8211; server communication topology between two network device in network.&nbsp;It has two basic protocols: TCP and IP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/TCPIP-1024x581.png\" alt=\"\" class=\"wp-image-743\" width=\"840\" height=\"476\" srcset=\"https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/TCPIP-1024x581.png 1024w, https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/TCPIP-300x170.png 300w, https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/TCPIP-768x435.png 768w, https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/TCPIP.png 1522w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><figcaption><center><strong><em>Topology of Client &#8211;&nbsp;Server&nbsp;communication based on TCP\/IP<\/em><\/strong><\/center><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Implement in NodeJS<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;Server<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">a.&nbsp;Call modules<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Asynchronous network API module\nvar net = require('net');\n\/\/ File system module to store data\nvar fs = require('fs');<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">b.&nbsp;Create server<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Create Server\nvar server = net.createServer(function(socket) {\n&nbsp;   \/\/ Log file\n&nbsp;   var logfile = fs.createWriteStream('server.log',{flags: 'a'});\n\n&nbsp;   \/\/ Callback function when there is error\n    logfile.on('error', function(err) {\n        \/\/ Print error to terminal\n        console.log(\"Log file: ERROR: \" + err);\n    });\n\n&nbsp;   \/\/ Forward received data to log file\n    socket.pipe(logfile);\n\n&nbsp;   \/\/ Callback function when data arrives\n&nbsp;   socket.on('data', function(data){\n        \/\/ Print raw data to terminal\n        console.log(data);\n        \/\/ Format data to UTF8 characters\n        var textChunk = data.toString('utf8');\n        \/\/ Print formatted data to terminal\n        console.log(textChunk);\n        \/\/ Respond to client\n        socket.write(\"OK\\r\\n\");\n    });\n\n&nbsp;   \/\/ Callback function when client disconnected\n    socket.on('end', function() {\n        console.log(\"Server: Client disconnected\");        \n    });\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Callback function when there is error\n    socket.on('error', function(err) {\n        \/\/ Print error to terminal\n        console.log(\"Server: ERROR: \" + err);\n    });\n});<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">c.&nbsp;Configure port<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Open port 2021\nserver.listen(2021, function() {\n&nbsp;   \/\/ Print to terminal if success\n&nbsp;   console.log(\"Server: listening !\\r\\n\");\n});<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;Client<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">a.&nbsp;Call modules<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Asynchronous network API module\nvar net = require('net');\n\/\/ File system module to store data\nvar fs = require('fs');<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">b.&nbsp;Create client<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Create Client\nvar client = new net.Socket();<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">c.&nbsp;Connect to server<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Connect to server\nclient.connect(2021, 'localhost', function() {\n&nbsp;   \/\/ Print to terminal if success\n    console.log('Connected');\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Create stream for log file    \n    var logfile = fs.createWriteStream('client.log',{flags: 'a'});\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Callback function when there is error\n    logfile.on('error', function(err) {\n        \/\/ Print error to terminal\n        console.log(\"Log file: ERROR: \" + err);\n    });\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Forward received data to log file\n    client.pipe(logfile);\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/ Send to Server\n    client.write(\"Sent from client!\");\n});<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">d.&nbsp;Receive response from server<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Callback function when data arrives\nclient.on('data', function(data) {\n&nbsp;   \/\/ Print to terminal\n    console.log('Received: ' + data);\n    \/\/ Kill client after server's response\n    client.destroy();\n});<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">e.&nbsp;Disconnection event<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript line-numbers\">\/\/ Callback function when client disconnected\nclient.on('close', function() {\n&nbsp;   \/\/ Print to terminal\n    console.log('Connection closed');\n});<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;Test<\/h3>\n\n\n\n<p>Run server on terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash line-numbers\">nodejs tcp_server.js<\/code><\/pre>\n\n\n\n<p>Run client on termial:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash line-numbers\">nodejs tcp_client.js<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"550\" src=\"https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/tcpip_test.jpg\" alt=\"\" class=\"wp-image-787\" srcset=\"https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/tcpip_test.jpg 733w, https:\/\/bigdolphin.com.vn\/wp-content\/uploads\/2021\/04\/tcpip_test-300x225.jpg 300w\" sizes=\"(max-width: 733px) 100vw, 733px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4. Reference<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/bigdolphin\/tcp-ip-nodejs\">https:\/\/github.com\/bigdolphin\/tcp-ip-nodejs<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/nodejs.org\/api\/net.html\">https:\/\/nodejs.org\/api\/net.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Simple applications for TCP\/IP Client and Server based on NodeJS<\/p>\n","protected":false},"author":2,"featured_media":852,"comment_status":"open","ping_status":"open","sticky":false,"template":"single-with-sidebar","format":"standard","meta":{"gtb_hide_title":false,"gtb_wrap_title":false,"gtb_class_title":"","gtb_remove_headerfooter":false,"footnotes":""},"categories":[10],"tags":[13,12],"_links":{"self":[{"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/posts\/793"}],"collection":[{"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=793"}],"version-history":[{"count":10,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/posts\/793\/revisions"}],"predecessor-version":[{"id":855,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/posts\/793\/revisions\/855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=\/wp\/v2\/media\/852"}],"wp:attachment":[{"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bigdolphin.com.vn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}