ホームページ >ウェブフロントエンド >jsチュートリアル >TCP ネットワーク通信に Node.js を使用する方法を段階的に説明します (演習)
TCP ネットワーク通信に Node.js を使用するにはどうすればよいですか?次の記事は、TCP ネットワーク通信に Node.js を使用する方法を理解するのに役立ちます。
要約: ネットワークは通信と相互接続の基礎です。Node.js は、TCP の実装に使用される net、http、dgram などのモジュールを提供します。 、HTTP、UDP それぞれ通信、この記事では主に Node.js を使った TCP 通信の実践を記録します。 [推奨学習: 「nodejs チュートリアル 」]
#1.1. 使用するNode.js による TCP サーバーの作成
#Node.js を使用して TCP サーバーを作成するには、まず require('net') を呼び出して net モジュールをロードし、次にnet モジュールの createServer メソッド。TCP サーバーを簡単に作成できます。構文形式は次のとおりです:net.createServer([options][, connectionListener]) options是一个对象参数值,有两个布尔类型的属性allowHalfOpen和pauseOnConnect。这两个属性默认都是false; connectionListener是一个当客户端与服务端建立连接时的回调函数,这个回调函数以socket端口对象作为参数。
#1.2. クライアント接続をリッスン #TCP サーバーの listen メソッドを使用して、クライアント接続のリッスンを開始します。構文形式は次のとおりです:
server.listen(port[, host][, backlog][, callback]); port:为需要监听的端口号,参数值为0的时候将随机分配一个端口号; host:服务器地址; backlog:连接等待队列的最大长度; callback:回调函数。次のコードは、TCP サーバーを作成し、ポート 8001 をリッスンできます:
//引入net模块 const net = require('net'); //创建TCP服务器 const server = net.createServer(function (socket) { console.log('有新的客户端接入'); }); //设置监听端口 server.listen(8001, function () { console.log('服务正在监听中。。。') });このコードを実行すると、コンソールで listen が実行されることがわかります。メソッドのコールバック関数は図に示すとおりです。
対応する TCP クライアントを使用できます。またはデバッグ ツールを使用して、作成した TCP サーバーに接続します。たとえば、Windows Telnet を使用する場合は、次のコマンドを使用して接続できます。
telnet localhost 8001接続が成功すると、コンソールに「新しいクライアント アクセス」という言葉が表示されることがわかります。 createServer メソッドのコールバック関数が Execute になり、作成された TCP サーバーに正常に接続されたことを示します。
server.listen() メソッドは実際にサーバーの下で listen イベントをトリガーするため、listen イベントを手動で監視することもできます。コードは次のとおりです:
//设置监听端口 server.listen(8001); //设置监听时的回调函数 server.on('listening', function () { console.log("服务正在监听中。。。") });Except TCP サーバーは、リッスン イベントに加えて、次のイベントもサポートします。
connection:当有新的链接创建时触发,回调函数的参数为socket连接对象。 close:TCP服务器关闭的时候触发,回调函数没有参数。 error:TCP服务器发生错误的时候触发,回调函数的参数为error对象。次のコードは、net.Server クラスを通じて TCP サーバーを作成し、上記のイベントを追加します。
//引入net模块 const net = require('net'); //实例化一个服务器对象 const server = new net.Server(); //监听connection事件 server.on('connection', function (socket) { console.log('有新的客户端接入'); }); //设置监听端口 server.listen(8001); //设置监听时的回调函数 server.on('listening', function () { console.log('服务正在监听中。。。'); }); //设置关闭时的回调函数 server.on('close', function () { console.log('服务已关闭'); }); //设置出错时的回调函数 server.on('error', function (err) { console.log('服务运行异常', err); });
1.3、サーバーがリッスンするアドレスを確認します
TCP サーバーを作成した後、server.address() メソッドを使用して、このメソッドは、TCP サーバーが監視するアドレス情報を返すため、server.listen() メソッドが呼び出されるとき、またはイベント リスニングのコールバック関数が呼び出されるときに、このメソッドを呼び出す必要があります。縛られている。このオブジェクトの属性は次のとおりです。 port:TCP服务器监听的端口号;
family:说明TCP服务器监听的地址是IPv6还是IPv4;
address:TCP服务器监听的地址。
コードは次のとおりです。
//引入net模块 const net = require('net'); //创建TCP服务器 const server = net.createServer(function (socket) { console.log('有新的客户端接入'); }); //设置监听端口 server.listen(8001); //设置监听时的回调函数 server.on('listening', function () { //获取地址信息 let address = server.address(); //获取地址详细信息 console.log("服务器监听的端口是:" + address.port); console.log("服务器监听的地址是:" + address.address); console.log("服务器监听的地址类型是:" + address.family); });
実行結果は次のとおりです。
##1.4 ,サーバーに接続しているクライアントの数
TCP サーバーを作成した後、server.getConnections( ) 方法。このメソッドは非同期メソッドです。コールバック関数には 2 つのパラメータがあります: 第一个参数为error对象。
第二个参数为连接TCP服务器的客户端数量。
接続数を取得することに加えて、TCP サーバーの最大接続数を設定することもできます。 TCPサーバー。接続数が最大接続数を超えると、サーバーは新しい接続を拒否します。次のコードは、この TCP サーバーの最大接続数を 3 に設定します。
//引入net模块 const net = require('net'); //创建TCP服务器 const server = net.createServer(function (socket) { console.log('有新的客户端接入'); //设置最大连接数量 server.maxConnections = 3; server.getConnections(function (err, count) { console.log("当前连接的客户端个数为:" + count); }); }); //设置监听端口 server.listen(8001, function () { console.log("服务正在监听中。。。") });このコードを実行して、複数のクライアントとの接続を試みます。次の図に示すように、クライアント接続数が 3 を超えると、新しいクライアントはサーバーに接続できなくなることがわかります:
1.5 , クライアントから送信されたデータを取得します
createServer メソッドのコールバック関数パラメーターは、net.Socket オブジェクト (サーバーがリッスンするポート オブジェクト) です。このオブジェクトには、 address() メソッド。TCP サーバーにバインドされたアドレスを取得するために使用され、ポート、ファミリー、およびアドレス属性を含むオブジェクトも返します。クライアントから送信されたストリームデータは、ソケットオブジェクトを通じて取得できます。データを受信するたびにdataイベントがトリガーされます。このイベントをリッスンすることで、クライアントから送信されたデータをコールバック関数で取得できます。コードは次のとおりです。 //引入net模块
const net = require('net');
//创建TCP服务器
const server = net.createServer(function (socket) {
//监听data事件
socket.on("data", function (data) {
//打印数据
console.log("接收到数据:" + data.toString());
});
});
//设置监听端口
server.listen(8001, function () {
console.log("服务正在监听中。。。")
});
テスト結果は次のとおりです:
データ イベントに加えて、ソケット オブジェクトには接続、終了、エラー、タイムアウトもあります。およびその他のイベント。
1.6. クライアントへのデータ送信调用socket.write()可以使TCP服务器发送数据,这个方法只有一个必需参数,就是需要发送的数据;第二个参数为编码格式,可选。同时,可以为这个方法设置一个回调函数。当有用户连接TCP服务器的时候,将发送数据给客户端,代码如下:
//引入net模块 const net = require('net'); //创建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("服务正在监听中。。。") });
测试结果如下:
在上面这段代码中还用到了socket对象的bytesWritten和bytesRead属性,这两个属性分别代表着发送数据的字节数和接收数据的字节数。除了上面这两个属性外,socket对象还有以下属性:
socket.localPort:本地端口的地址; socket.localAddress:本地IP地址; socket.remotePort:进程端口地址; socket.remoteFamily:进程IP协议族; socket.remoteAddress:进程IP地址。
Node.js在创建一个TCP客户端的时候同样使用的是net(网络)模块。
2.1、使用Node.js创建TCP客户端
为了使用Node.js创建TCP客户端,首先要调用require(‘net’)来加载net模块。创建一个TCP客户端只需要创建一个连接TCP客户端的socket对象即可:
//引入net模块 const net = require('net'); //创建TCP客户端 const client = new net.Socket();
创建一个socket对象的时候可以传入一个json对象。这个对象有以下属性:
fd:指定一个存在的文件描述符,默认值为null; readable:是否允许在这个socket上读,默认值为false; writeable:是否允许在这个socket上写,默认值为false; allowHalfOpen:该属性为false时,TCP服务器接收到客户端发送的一个FIN包后,将会回发一个FIN包;该属性为true时,TCP服务器接收到客户端发送的一个FIN包后不会回发FIN包。
2.2、连接TCP服务器
创建了一个socket对象后,调用socket对象的connect()方法就可以连接一个TCP服务器,代码如下:
//引入net模块 const net = require('net'); //创建TCP客户端 const client = new net.Socket(); //设置连接的服务器 client.connect(8001, '127.0.0.1', function () { console.log("连接服务器成功"); });
连接成功如下图所示:
2.3、获取从TCP服务器发送的数据
socket对象有data、error、close、end等事件,因可以通过监听data事件来获取从TCP服务器发送的数据,代码如下:
//引入net模块 const net = require('net'); //创建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()); });
先启动TCP服务端,再运行上面客户端,可以发现命令行中已经输出了来自服务端的数据,说明此时已经实现了服务端和客户端之间的通信:
2.4、向TCP服务器发送数据
因为TCP客户端是一个socket对象,所以可以使用以下代码来向TCP服务器发送数据:
//引入net模块 const net = require('net'); //创建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("客户端发送数据结束") });
客户端控制台输出:
服务端控制台输出:
至此使用Node.js进行TCP网络通信完成,如有不对的地方欢迎指正。
原文地址:https://bbs.huaweicloud.com/blogs/300544?utm_source=juejin&utm_medium=bbs-ex&utm_campaign=other&utm_content=content
作者:lwq1228
更多编程相关知识,请访问:编程视频!!
以上がTCP ネットワーク通信に Node.js を使用する方法を段階的に説明します (演習)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。