在Node.js中使用TCP通訊端編程__小程式

來源:互聯網
上載者:User

轉自:http://cnodejs.org/topic/4fb1c1fd1975fe1e1310490b

  在Node.js中使用TCP通訊端編程

譯自http://www.hacksparrow.com/tcp-socket-programming-in-node-js.html

想知道如何在NodeJS中使用socket編程。在NodeJS中有三種socket:1. TCP,2. UDP,3. Unix域通訊端,本文主要介紹NodeJS中TCP的基本編程知識。

你可以建立兩種類型的TCP通訊端:1. 服務端,2. 用戶端。服務端TCP監聽來自用戶端的串連請求,並使用TCP串連向用戶端發送資料;用戶端TCP串連到服務端並與伺服器互動資料。用戶端與服務端之間依靠通訊端進行雙向通訊。

在NodeJS中使用TCP需要引用net模組。net模組是NodeJS中非同步網路編程的封裝,可以做很多事情,本文僅關注於如何使用該模組建立服務端與用戶端的TCP通訊端。

建立TCP服務端

下面是一個在NodeJS中建立TCP服務端通訊端的簡單例子,相關說明見代碼注釋。

var net = require('net');var HOST = '127.0.0.1';var PORT = 6969;// 建立一個TCP伺服器執行個體,調用listen函數開始監聽指定連接埠// 傳入net.createServer()的回呼函數將作為”connection“事件的處理函數// 在每一個“connection”事件中,該回呼函數接收到的socket對象是唯一的net.createServer(function(sock) {    // 我們獲得一個串連 - 該串連自動關聯一個socket對象    console.log('CONNECTED: ' +        sock.remoteAddress + ':' + sock.remotePort);    // 為這個socket執行個體添加一個"data"事件處理函數    sock.on('data', function(data) {        console.log('DATA ' + sock.remoteAddress + ': ' + data);        // 回傳該資料,用戶端將收到來自服務端的資料        sock.write('You said "' + data + '"');    });    // 為這個socket執行個體添加一個"close"事件處理函數    sock.on('close', function(data) {        console.log('CLOSED: ' +            sock.remoteAddress + ' ' + sock.remotePort);    });}).listen(PORT, HOST);console.log('Server listening on ' + HOST +':'+ PORT);

服務端也可以用稍不同的方式接受TCP串連,即顯式處理"connection"事件:

var server = net.createServer();server.listen(PORT, HOST);console.log('Server listening on ' +    server.address().address + ':' + server.address().port);server.on('connection', function(sock) {    console.log('CONNECTED: ' +         sock.remoteAddress +':'+ sock.remotePort);    // 其它內容與前例相同});

上述兩個例子只是寫法不同,並無本質區別。

建立TCP用戶端

現在讓我們建立一個TCP用戶端串連到剛建立的伺服器上,該用戶端向伺服器發送一串訊息,並在得到伺服器的反饋後關閉串連。下面的代碼描述了這一過程。

var net = require('net');var HOST = '127.0.0.1';var PORT = 6969;var client = new net.Socket();client.connect(PORT, HOST, function() {    console.log('CONNECTED TO: ' + HOST + ':' + PORT);    // 建立串連後立即向伺服器發送資料,伺服器將收到這些資料     client.write('I am Chuck Norris!');});// 為用戶端添加“data”事件處理函數// data是伺服器發回的資料client.on('data', function(data) {    console.log('DATA: ' + data);    // 完全關閉串連    client.destroy();});// 為用戶端添加“close”事件處理函數client.on('close', function() {    console.log('Connection closed');});

這就是NodeJS中進行TCP網路編程的基本過程,希望能對你有所協助。需要注意的是,通訊端編程要比這裡的例子複雜得多,當你使用通訊端發送大量資料或完成複雜任務的時候,你就會用到流(Streams)和緩衝區(Buffers)等相關模組。

進一步閱讀 <ol> NodeJS net 模組 NodeJS stream 模組 NodeJS buffer 模組 </ol>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.