TCP 네트워크 통신에 Node.js를 어떻게 사용하나요? 다음 기사는 TCP 네트워크 통신에 Node.js를 사용하는 방법을 이해하는 데 도움이 될 것입니다.
요약: 네트워크는 통신과 상호 연결의 기초입니다. Node.js는 각각 TCP, HTTP 및 UDP 통신을 구현하는 데 사용되는 net, http 및 dgram과 같은 모듈을 제공합니다. Node.js를 사용한 TCP 통신 일부 실습 기록. [추천 학습: "nodejs 튜토리얼"]
1.1 Node.js를 사용하여 TCP 서버를 생성하려면
TCP 서버를 사용하려면 먼저 require('net')를 호출하여 net 모듈을 로드한 다음 net 모듈의 createServer 메서드를 호출해야 TCP 서버를 쉽게 생성할 수 있습니다. 구문 형식은 다음과 같습니다.
net.createServer([options][, connectionListener]) options是一个对象参数值,有两个布尔类型的属性allowHalfOpen和pauseOnConnect。这两个属性默认都是false; connectionListener是一个当客户端与服务端建立连接时的回调函数,这个回调函数以socket端口对象作为参数。
1.2 . 클라이언트 연결 모니터링
TCP 서버 사용하기 메소드는 클라이언트 연결 모니터링을 시작할 수 있습니다. 구문 형식은 다음과 같습니다:
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('服务正在监听中。。。') });
Run 이 코드를 보면 그림과 같이 콘솔에서 Listen 메소드를 실행하는 콜백 함수를 볼 수 있습니다.
해당 TCP 클라이언트 또는 디버깅 도구를 사용하여 생성된 이 TCP 서버에 연결할 수 있습니다. 예를 들어 Windows Telnet을 사용하려는 경우 다음 명령을 사용하여 연결할 수 있습니다.
telnet localhost 8001
연결에 성공한 후 콘솔에 "New client access"라는 단어가 인쇄되는 것을 볼 수 있습니다. createServer 메소드가 실행되어 생성된 TCP 서버에 성공적으로 연결되었음을 나타냅니다.
server.listen() 메소드는 실제로 서버에서 청취 이벤트를 트리거하므로 청취 이벤트를 수동으로 모니터링할 수도 있습니다.
//设置监听端口 server.listen(8001); //设置监听时的回调函数 server.on('listening', function () { console.log("服务正在监听中。。。") });
청취 이벤트 외에도 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 서버가 모니터링하는 주소를 확인하고 JSON 객체를 반환하는 메서드입니다. 이 메서드는 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() 메소드를 사용하여 이 TCP 서버에 연결된 클라이언트 수를 가져올 수 있습니다. 이 메소드는 비동기 메소드입니다. 콜백 함수에는 두 개의 매개변수가 있습니다.
第一个参数为error对象。 第二个参数为连接TCP服务器的客户端数量。
연결 수를 가져오는 것 외에도 TCP 서버의 maxConnections 속성을 설정하여 이 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 객체(서버가 수신하는 포트 객체)입니다. 이 객체에는 TCP 서버에 바인딩된 주소를 얻는 데 사용되는 address() 메서드도 포함되어 있습니다. 포트, 가족 및 주소 속성. 클라이언트가 보낸 스트림 데이터는 소켓 객체를 통해 얻을 수 있으며, 데이터가 수신될 때마다 데이터 이벤트가 발생하며, 이 이벤트를 수신하여 콜백 함수에서 코드를 얻을 수 있습니다.
//引入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("服务正在监听中。。。") });
테스트 결과는 다음과 같습니다.
소켓 객체에는 데이터 이벤트 외에도 connect, end, error, timeout 및 기타 이벤트가 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!