TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)
TCP 네트워크 통신에 Node.js를 어떻게 사용하나요? 다음 기사는 TCP 네트워크 통신에 Node.js를 사용하는 방법을 이해하는 데 도움이 될 것입니다.
요약: 네트워크는 통신과 상호 연결의 기초입니다. Node.js는 각각 TCP, HTTP 및 UDP 통신을 구현하는 데 사용되는 net, http 및 dgram과 같은 모듈을 제공합니다. Node.js를 사용한 TCP 통신 일부 실습 기록. [추천 학습: "nodejs 튜토리얼"]
1. TCP 서버 구축
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地址。
2、构建TCP客户端
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

이 기사는 NodeJS V8 엔진의 메모리 및 가비지 수집기(GC)에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다.

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

Node 19가 정식 출시되었습니다. 이 글에서는 Node.js 19의 6가지 주요 기능에 대해 자세히 설명하겠습니다. 도움이 되셨으면 좋겠습니다!

Node.js는 GC(가비지 수집)를 어떻게 수행하나요? 다음 기사에서는 이에 대해 설명합니다.

노드가 npm 명령을 사용할 수 없는 이유는 환경 변수가 올바르게 구성되지 않았기 때문입니다. 해결 방법은 다음과 같습니다. 1. "시스템 속성"을 엽니다. 2. "환경 변수" -> "시스템 변수"를 찾은 다음 환경을 편집합니다. 3. nodejs 폴더의 위치를 찾습니다. 4. "확인"을 클릭합니다.

이벤트 루프는 Node.js의 기본 부분이며 메인 스레드가 차단되지 않도록 하여 비동기 프로그래밍을 가능하게 합니다. 이벤트 루프를 이해하는 것은 효율적인 애플리케이션을 구축하는 데 중요합니다. 다음 기사는 Node.js의 이벤트 루프에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다!
