Node.js net模塊功能及事件監(jiān)聽用法分析
本文實例講述了Node.js net模塊功能及事件監(jiān)聽用法。分享給大家供大家參考,具體如下:
net模塊
對比C語言的網(wǎng)絡編程,Node.js有更加簡便的開發(fā)模式與模塊提供。它就是net模塊
在需要使用的時候只需要require("net")就可以引入模塊了。
var net = require("net");
服務端編程
引入模塊的前提下:
1. 創(chuàng)建一個新的TCP或IPC服務
var server = net.createServer(function(client_socket) {
console.log("client coming");
});
2. 創(chuàng)建connections 啟動一個 server 監(jiān)聽.
server.listen({
host:'127.0.0.1',
port:6080,
exclusive:true,
});
客戶端編程
引入net模塊。
1. 創(chuàng)建一個連接即可
//端口要與需要連接的服務器端口一致
var socket = net.connect({
port:6080,
host:'127.0.0.1',
},
function(){
console.log("connected to server!");
});
效果

事件監(jiān)聽
| 常用監(jiān)聽事件事件類型 | 事件觸發(fā)條件 |
|---|---|
| connection | 連接成功調(diào)用的事件 |
| error | 發(fā)生錯誤調(diào)用的事件 |
| close | 當server關(guān)閉的時候觸發(fā). 注意,如果有連接存在, 直到所有的連接結(jié)束才會觸發(fā)這個事件 |
| data | 當接收到數(shù)據(jù)的時觸發(fā)該事件。data 參數(shù)是一個 Buffer 或 String。數(shù)據(jù)編碼由 socket.setEncoding() 設(shè)置。注意當 Socket 發(fā)送 data 事件的時候,如果沒有監(jiān)聽者數(shù)據(jù)將會丟失。 |
| listening | 當服務被綁定后調(diào)用 server.listen(). |
| end | 當 socket 的另一端發(fā)送一個 FIN 包的時候觸發(fā),從而結(jié)束 socket 的可讀端。 |
監(jiān)聽事件的API都是使用on()方法。
Demo演示
下面有一個詳細的demo可自行嘗試
tcpserver.js
//tcpserver.js
var net = require('net');
var server = net.createServer(function(client_socket) {
console.log("client coming");
client_socket.setEncoding("utf8");
//接收到客戶端發(fā)送的錯誤就會調(diào)用
client_socket.on("error",function(err){
console.log("error");
});
//有接收到客戶端的數(shù)據(jù)調(diào)用的函數(shù)
//data 默認是Hex(二進制編碼)格式,如果強制設(shè)置為utf8那么底層會先轉(zhuǎn)換為utf8字符串傳過去
client_socket.on("data",function(data){
console.log(data);
});
//用戶斷線離開
client_socket.on("close",function(client_socket){
console.log("close socket");
});
});
//編寫代碼指示server監(jiān)聽到某個端口上
//配置好之后就會監(jiān)聽server 等待客戶端接入
//host==> 地址 port ==>端口 exclusive ==> 獨占模式
server.listen({
host:'127.0.0.1',
port:6080,
exclusive:true,
});
server.on("connection",function(client_socket){
console.log("connection");
});
//server.unref();//停止node對server的監(jiān)聽事件
server.on("error",function (error) {
console.log("error is on server",error);
});
//服務器關(guān)閉事件
server.on("close",function(client_socket){
console.log("close server");
});
tcpclient.js
//tcpclient.js
var net = require("net");
//net.socket類
var socket = net.connect({
port:6080,
host:'127.0.0.1',
},
function(){
console.log("connected to server!");
});
//連接成功調(diào)用的事件
socket.on("connect",function(){
console.log("connect success");
//已utf-8的方式編碼成二進制的數(shù)據(jù)傳輸
socket.write("Hello World!","utf8");
});
//發(fā)生錯誤調(diào)用的事件
socket.on("error",function (err) {
console.log("error is ",err);
});
//socket 關(guān)閉事件
socket.on("close",function(){
console.log("close");
});
//對方發(fā)送關(guān)閉數(shù)據(jù)包的事件
socket.on("end",function(){
console.log("end event");
})
//當有數(shù)據(jù)發(fā)送過來的時候調(diào)用
socket.on("data",function(data){
console.log(data);
});
希望本文所述對大家nodejs程序設(shè)計有所幫助。
相關(guān)文章
node.js中的fs.appendFileSync方法使用說明
這篇文章主要介紹了node.js中的fs.appendFileSync方法使用說明,本文介紹了fs.appendFileSync方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12
node.js報錯:npm?ERR?code?EPERM的解決過程
在學習vue+typescript的時候突然發(fā)現(xiàn)了個錯誤,所以下面這篇文章主要給大家介紹了關(guān)于node.js報錯:npm?ERR?code?EPERM的詳細解決過程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-08-08
Node.js?網(wǎng)絡框架koa?compose中間件使用解析
這篇文章主要為大家介紹了Node.js?網(wǎng)絡框架koa?compose中間件使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
解決koa2 ctx.render is not a function報錯問題
這篇文章主要介紹了解決koa2 ctx.render is not a function報錯問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

