목차
1. TCP 서버 구축
2、构建TCP客户端
웹 프론트엔드 JS 튜토리얼 TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

Sep 24, 2021 am 10:28 AM
node.js

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 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

해당 TCP 클라이언트 또는 디버깅 도구를 사용하여 생성된 이 TCP 서버에 연결할 수 있습니다. 예를 들어 Windows Telnet을 사용하려는 경우 다음 명령을 사용하여 연결할 수 있습니다.

telnet localhost 8001
로그인 후 복사

연결에 성공한 후 콘솔에 "New client access"라는 단어가 인쇄되는 것을 볼 수 있습니다. createServer 메소드가 실행되어 생성된 TCP 서버에 성공적으로 연결되었음을 나타냅니다.

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

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);
});
로그인 후 복사

실행 결과는 다음과 같습니다.

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

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을 초과하면 그림과 같이 새 클라이언트가 서버에 연결할 수 없음을 알 수 있습니다.

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

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("服务正在监听中。。。")
});
로그인 후 복사

테스트 결과는 다음과 같습니다.

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

소켓 객체에는 데이터 이벤트 외에도 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("服务正在监听中。。。")
});
로그인 후 복사

测试结果如下:

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

在上面这段代码中还用到了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("连接服务器成功");
});
로그인 후 복사

连接成功如下图所示:

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

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服务端,再运行上面客户端,可以发现命令行中已经输出了来自服务端的数据,说明此时已经实现了服务端和客户端之间的通信:

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

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("客户端发送数据结束")
});
로그인 후 복사

客户端控制台输出:

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

服务端控制台输出:

TCP 네트워크 통신을 위해 Node.js를 사용하는 방법을 단계별로 가르칩니다(연습)

至此使用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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Node의 메모리 제어에 관한 기사 Node의 메모리 제어에 관한 기사 Apr 26, 2023 pm 05:37 PM

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

Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Mar 29, 2023 pm 06:02 PM

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

Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Apr 24, 2023 pm 05:49 PM

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

최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? 최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? Dec 13, 2022 pm 08:00 PM

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

Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Nov 16, 2022 pm 08:34 PM

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

Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Nov 29, 2022 pm 08:44 PM

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

노드가 npm 명령을 사용할 수 없으면 어떻게 해야 합니까? 노드가 npm 명령을 사용할 수 없으면 어떻게 해야 합니까? Feb 08, 2023 am 10:09 AM

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

Node의 이벤트 루프에 대해 이야기해 봅시다. Node의 이벤트 루프에 대해 이야기해 봅시다. Apr 11, 2023 pm 07:08 PM

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

See all articles