Rumah > hujung hadapan web > tutorial js > Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

青灯夜游
Lepaskan: 2021-09-24 10:28:04
ke hadapan
7949 orang telah melayarinya

Bagaimana untuk menggunakan Node.js untuk komunikasi rangkaian TCP? Artikel berikut akan membantu anda memahami cara menggunakan Node.js untuk komunikasi rangkaian TCP. Saya harap ia akan membantu anda!

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

Abstrak: Rangkaian ialah asas komunikasi dan interkoneksi Node.js menyediakan net, http, dgram dan modul lain, yang digunakan untuk melaksanakan TCP, HTTP dan UDP Communication masing-masing, artikel ini merekodkan amalan komunikasi TCP menggunakan Node.js. [Pembelajaran yang disyorkan: "tutorial nodejs"]

1 Bina pelayan TCP

1.1 Node.js mencipta pelayan TCP

Untuk menggunakan Node.js untuk mencipta pelayan TCP, panggilan pertama memerlukan('net') untuk memuatkan modul bersih, dan kemudian panggil kaedah createServer modul bersih. Buat pelayan TCP dengan mudah dengan sintaks berikut:

net.createServer([options][, connectionListener])
options是一个对象参数值,有两个布尔类型的属性allowHalfOpen和pauseOnConnect。这两个属性默认都是false;
connectionListener是一个当客户端与服务端建立连接时的回调函数,这个回调函数以socket端口对象作为参数。
Salin selepas log masuk

1.2. Dengar untuk sambungan pelanggan

Gunakan kaedah dengar pelayan TCP Anda boleh mula memantau sambungan klien Format sintaks adalah seperti berikut:

server.listen(port[, host][, backlog][, callback]);
port:为需要监听的端口号,参数值为0的时候将随机分配一个端口号;
host:服务器地址;
backlog:连接等待队列的最大长度;
callback:回调函数。
Salin selepas log masuk

Kod berikut boleh mencipta pelayan TCP dan mendengar port 8001:

<🎜. >
//引入net模块
const net = require(&#39;net&#39;);
//创建TCP服务器
const server = net.createServer(function (socket) {
    console.log(&#39;有新的客户端接入&#39;);
});
//设置监听端口
server.listen(8001, function () {
    console.log(&#39;服务正在监听中。。。&#39;)
});
Salin selepas log masuk
Jalankan kod ini dan anda boleh mengawalnya Stesen melihat fungsi panggil balik yang melaksanakan kaedah dengar, seperti yang ditunjukkan dalam rajah:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

Anda boleh menggunakan yang sepadan Pelanggan TCP atau alat penyahpepijatan untuk menyambung ke pelayan TCP yang dibuat. Contohnya, jika anda ingin menggunakan Windows Telnet, anda boleh menggunakan arahan berikut untuk menyambung:

telnet localhost 8001
Salin selepas log masuk
Selepas sambungan berjaya, anda boleh melihat bahawa konsol mencetak perkataan "Akses klien baharu", menunjukkan panggilan balik kaedah createServer Fungsi telah dilaksanakan, menunjukkan bahawa pelayan TCP yang dibuat telah berjaya disambungkan.

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

Kaedah server.listen() sebenarnya mencetuskan acara mendengar di bawah pelayan, jadi anda juga boleh memantau acara mendengar secara manual Kodnya adalah seperti berikut:

//设置监听端口
server.listen(8001);
//设置监听时的回调函数
server.on(&#39;listening&#39;, function () {
    console.log("服务正在监听中。。。")
});
Salin selepas log masuk
Selain acara mendengar, pelayan TCP juga menyokong acara berikut:

connection:当有新的链接创建时触发,回调函数的参数为socket连接对象。
close:TCP服务器关闭的时候触发,回调函数没有参数。
error:TCP服务器发生错误的时候触发,回调函数的参数为error对象。
Salin selepas log masuk
Kod berikut mencipta pelayan TCP melalui kelas net.Server dan menambah acara di atas:

//引入net模块
const net = require(&#39;net&#39;);
//实例化一个服务器对象
const server = new net.Server();
//监听connection事件
server.on(&#39;connection&#39;, function (socket) {
    console.log(&#39;有新的客户端接入&#39;);
});
//设置监听端口
server.listen(8001);
//设置监听时的回调函数
server.on(&#39;listening&#39;, function () {
    console.log(&#39;服务正在监听中。。。&#39;);
});
//设置关闭时的回调函数
server.on(&#39;close&#39;, function () {
    console.log(&#39;服务已关闭&#39;);
});
//设置出错时的回调函数
server.on(&#39;error&#39;, function (err) {
    console.log(&#39;服务运行异常&#39;, err);
});
Salin selepas log masuk

1.3 Lihat alamat yang dipantau oleh pelayan

Selepas mencipta pelayan TCP, anda boleh melihat alamat yang dipantau oleh Pelayan TCP melalui kaedah server.address() dan mengembalikan objek JSON Oleh kerana kaedah ini mengembalikan maklumat alamat yang didengari oleh pelayan TCP, kaedah ini harus dipanggil apabila kaedah server.listen() dipanggil atau fungsi panggil balik dalam. acara mendengar terikat. Atribut objek ini ialah:

port:TCP服务器监听的端口号;
family:说明TCP服务器监听的地址是IPv6还是IPv4;
address:TCP服务器监听的地址。
Salin selepas log masuk
Kod adalah seperti berikut:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP服务器
const server = net.createServer(function (socket) {
    console.log(&#39;有新的客户端接入&#39;);
});
//设置监听端口
server.listen(8001);
//设置监听时的回调函数
server.on(&#39;listening&#39;, function () {
    //获取地址信息
    let address = server.address();
    //获取地址详细信息
    console.log("服务器监听的端口是:" + address.port);
    console.log("服务器监听的地址是:" + address.address);
    console.log("服务器监听的地址类型是:" + address.family);
});
Salin selepas log masuk
Hasil larian adalah seperti yang ditunjukkan dalam rajah:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

1.4 Bilangan pelanggan yang disambungkan ke pelayan

Selepas mencipta pelayan TCP, anda boleh mendapatkan bilangan pelanggan yang disambungkan ke TCP. pelayan melalui kaedah server.getConnections(). Kaedah ini ialah kaedah tak segerak dan fungsi panggil balik mempunyai dua parameter:

第一个参数为error对象。
第二个参数为连接TCP服务器的客户端数量。
Salin selepas log masuk
Selain mendapatkan bilangan sambungan, anda juga boleh menetapkan bilangan sambungan maksimum untuk pelayan TCP ini dengan menetapkan maxConnections atribut pelayan TCP. Apabila bilangan sambungan melebihi bilangan sambungan maksimum, pelayan akan menolak sambungan baharu. Kod berikut menetapkan bilangan maksimum sambungan untuk pelayan TCP ini kepada 3.

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP服务器
const server = net.createServer(function (socket) {
    console.log(&#39;有新的客户端接入&#39;);
    //设置最大连接数量
    server.maxConnections = 3;
    server.getConnections(function (err, count) {
        console.log("当前连接的客户端个数为:" + count);
    });
});
//设置监听端口
server.listen(8001, function () {
    console.log("服务正在监听中。。。")
});
Salin selepas log masuk
Jalankan kod ini dan cuba berhubung dengan berbilang pelanggan. Ia boleh didapati bahawa apabila bilangan sambungan pelanggan melebihi 3, pelanggan baharu tidak boleh menyambung ke pelayan, seperti yang ditunjukkan dalam rajah:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

1.5 , Dapatkan data yang dihantar oleh klien

Parameter fungsi panggil balik kaedah createServer ialah objek net.Socket (objek port yang dipantau oleh pelayan ini juga). () kaedah, Digunakan untuk mendapatkan alamat yang terikat pada pelayan TCP, ia juga mengembalikan objek yang mengandungi port, keluarga, dan atribut alamat. Data aliran yang dihantar oleh klien boleh diperolehi melalui objek soket Peristiwa data dicetuskan setiap kali data diterima Dengan mendengar peristiwa ini, data yang dihantar oleh klien boleh diperolehi dalam fungsi panggilan balik berikut:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP服务器
const server = net.createServer(function (socket) {
    //监听data事件
    socket.on("data", function (data) {
        //打印数据
        console.log("接收到数据:" + data.toString());
    });
});
//设置监听端口
server.listen(8001, function () {
    console.log("服务正在监听中。。。")
});
Salin selepas log masuk
Keputusan ujian adalah seperti berikut:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

Selain peristiwa data, objek soket juga mempunyai sambungan, tamat, ralat, tamat masa dan acara lain.

1.6. Hantar data kepada pelanggan

调用socket.write()可以使TCP服务器发送数据,这个方法只有一个必需参数,就是需要发送的数据;第二个参数为编码格式,可选。同时,可以为这个方法设置一个回调函数。当有用户连接TCP服务器的时候,将发送数据给客户端,代码如下:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP服务器
const server = net.createServer(function (socket) {
    //设置消息内容
    const message = "Hello Client......";
    //发送数据
    socket.write(message, function () {
        const writeSize = socket.bytesWritten;
        console.log("数据发送成功,数据长度为:" + writeSize);
    });

    //监听data事件
    socket.on("data", function (data) {
        const readSize = socket.bytesRead;
        //打印数据
        console.log("接收到数据为:" + data.toString(), ";接收的数据长度为:" + readSize);
    });
});
//设置监听端口
server.listen(8001, function () {
    console.log("服务正在监听中。。。")
});
Salin selepas log masuk

测试结果如下:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

在上面这段代码中还用到了socket对象的bytesWritten和bytesRead属性,这两个属性分别代表着发送数据的字节数和接收数据的字节数。除了上面这两个属性外,socket对象还有以下属性:

socket.localPort:本地端口的地址;
socket.localAddress:本地IP地址;
socket.remotePort:进程端口地址;
socket.remoteFamily:进程IP协议族;
socket.remoteAddress:进程IP地址。
Salin selepas log masuk

2、构建TCP客户端

Node.js在创建一个TCP客户端的时候同样使用的是net(网络)模块。

2.1、使用Node.js创建TCP客户端

为了使用Node.js创建TCP客户端,首先要调用require(‘net’)来加载net模块。创建一个TCP客户端只需要创建一个连接TCP客户端的socket对象即可:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP客户端
const client = new net.Socket();
Salin selepas log masuk

创建一个socket对象的时候可以传入一个json对象。这个对象有以下属性:

fd:指定一个存在的文件描述符,默认值为null;
readable:是否允许在这个socket上读,默认值为false;
writeable:是否允许在这个socket上写,默认值为false;
allowHalfOpen:该属性为false时,TCP服务器接收到客户端发送的一个FIN包后,将会回发一个FIN包;该属性为true时,TCP服务器接收到客户端发送的一个FIN包后不会回发FIN包。
Salin selepas log masuk

2.2、连接TCP服务器

创建了一个socket对象后,调用socket对象的connect()方法就可以连接一个TCP服务器,代码如下:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP客户端
const client = new net.Socket();
//设置连接的服务器
client.connect(8001, '127.0.0.1', function () {
    console.log("连接服务器成功");
});
Salin selepas log masuk

连接成功如下图所示:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

2.3、获取从TCP服务器发送的数据

socket对象有data、error、close、end等事件,因可以通过监听data事件来获取从TCP服务器发送的数据,代码如下:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP客户端
const client = new net.Socket();
//设置连接的服务器
client.connect(8001, '127.0.0.1', function () {
    console.log("连接服务器成功");
});
//监听data事件
client.on("data", function (data) {
    //打印数据
    console.log("接收到数据为:" + data.toString());
});
Salin selepas log masuk

先启动TCP服务端,再运行上面客户端,可以发现命令行中已经输出了来自服务端的数据,说明此时已经实现了服务端和客户端之间的通信:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

2.4、向TCP服务器发送数据

因为TCP客户端是一个socket对象,所以可以使用以下代码来向TCP服务器发送数据:

//引入net模块
const net = require(&#39;net&#39;);
//创建TCP客户端
const client = new net.Socket();
//设置连接的服务器
client.connect(8001, '127.0.0.1', function () {
    console.log("连接服务器成功");
    //给服务端发送数据
    client.write("Hello Server......");
});
//监听data事件
client.on("data", function (data) {
    //打印数据
    console.log("接收到数据为:" + data.toString());
});
//监听end事件
client.on("end", function () {
    console.log("客户端发送数据结束")
});
Salin selepas log masuk

客户端控制台输出:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

服务端控制台输出:

Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan)

至此使用Node.js进行TCP网络通信完成,如有不对的地方欢迎指正。

原文地址:https://bbs.huaweicloud.com/blogs/300544?utm_source=juejin&utm_medium=bbs-ex&utm_campaign=other&utm_content=content

作者:lwq1228

更多编程相关知识,请访问:编程视频!!

Atas ialah kandungan terperinci Ajar anda langkah demi langkah cara menggunakan Node.js untuk komunikasi rangkaian TCP (Amalan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:华为云社区
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan