TCP 서비스는 네트워크 애플리케이션에서 매우 일반적입니다. 현재 대부분의 애플리케이션은 TCP를 기반으로 구축됩니다. net 모듈은 서버와 클라이언트를 생성하는 방법이 포함된 TCP 네트워크 프로그래밍을 위한 비동기 네트워크 래퍼를 제공합니다. 이 기사에서는 nodeJS의 net 모듈을 자세히 소개합니다.
관련 권장사항: "nodejs tutorial"
IP test
【net.isIP(input)】
입력이 IP 주소인지 테스트하세요. 문자열이 유효하지 않으면 0을 반환합니다. IPV4인 경우 4, IPV6인 경우 6을 반환
var net = require('net'); console.log(net.isIP('1.1.1.1'));//4 console.log(net.isIP('1.1'));//0 console.log(net.isIP('AD80::ABAA:0000:00C2:0002'));//6
【net.isIPv4(input)】
입력 주소가 IPV4인 경우 true를 반환하고, IPV4인 경우 false를 반환
var net = require('net'); console.log(net.isIPv4('1.1.1.1'));//true console.log(net.isIPv4('1.1'));//false
【net.isIPv6(input)】
입력한 주소가 IPV6이면 true, 그렇지 않으면 false를 반환
var net = require('net'); console.log(net.isIPv6('1.1.1.1'));//true console.log(net.isIPv6('AD80::ABAA:0000:00C2:0002'));//true
Server
【net.createServer([options][,connectionListener])】
다음 매개변수로 TCP 서버를 생성합니다
options allowHalfOpen: false(默认),如果为true,当另一端socket发送FIN包时socket不会自动发送FIN包。socket变为不可读但可写(半关闭) pauseOnConnect: false(默认),如果为true,当连接到来的时候相关联的socket将会暂停。它允许在初始进程不读取数据情况下,让连接在进程间传递。调用resume()从暂停的socket里读取数据 connectionListener 自动给 'connection' 事件创建监听器
var server = net.createServer(function() { });
【server.listen(port[, 호스트][, backlog][, callback])]
지정된 포트 및 호스트로부터의 연결 수락을 시작합니다. 호스트가 생략되면 서버는 모든 IPv4 주소(INADDR_ANY)로부터의 직접 연결을 허용합니다. 포트가 0이면 임의의 포트가 할당됩니다. 백로그는 연결 대기 대기열의 최대 길이입니다. 실제 길이는 Linux의 tcp_max_syn_backlog 및 somaxconn과 같이 sysctl을 통해 운영 체제에 의해 설정됩니다. 이 매개변수의 기본값은 511
서버 바인딩 시 'listening' 이벤트가 발생합니다. 마지막 매개변수 콜백은 'listening' 이벤트의 리스너로 사용됩니다.
일부 사용자는 요청한 포트에서 다른 서버가 이미 실행 중임을 나타내는 EADDRINUSE 오류가 발생합니다. 이 상황을 처리하는 방법은 잠시 기다렸다가 다시 시도하는 것입니다
server.listen(6000);
【server.close([콜백])】
서버는 새로운 연결 수신을 중단하고 기존 연결을 유지합니다. 모든 연결이 완료되면 서버가 닫히고 'close' 이벤트가 트리거됩니다. 콜백 함수를 전달하여 'close' 이벤트를 수신할 수 있습니다. 존재하는 경우 오류(있는 경우)를 유일한 매개변수로 사용하여 콜백 함수가 호출됩니다.
[server.address()]
운영 체제는 바인딩된 주소, 프로토콜 제품군 이름 및 서버 포트를 반환합니다. 시스템에 의해 바인딩된 포트를 찾을 때 매우 유용합니다
[참고] 'listening' 이벤트가 트리거되기 전에 server.address()를 호출하지 마세요
server.listen(function() { //{ address: '::', family: 'IPv6', port: 53806 } console.log(server.address()); });
【server.maxConnections】
이 옵션을 설정한 후, 서버 연결 개수가 개수를 초과하면 새 연결을 거부합니다
소켓이 child_process.fork() 메서드를 사용하여 하위 프로세스로 전송되면 이 옵션은 권장되지 않습니다
【server.getConnections(callback)】
비동기적으로 서버 수량의 현재 활성 연결을 얻습니다. 소켓이 하위 프로세스로 전송될 때만 유효합니다.
콜백 함수에는 2개의 매개변수 err과 count가 있습니다
server.getConnections(function(err,count){ console.log(count);//0 })
【이벤트 청취】
서버가 바인딩을 위해 server.listen을 호출할 때 트리거됩니다.
【 이벤트 연결】
{Socket object} 连接对象
새로운 연결이 생성되면 시작됩니다. 소켓은 net.Socket
의 인스턴스입니다.Socket
【이벤트 종료】
서버가 닫힐 때 발생합니다
[참고] 연결이 있는 경우 모든 연결이 닫힐 때까지 이 이벤트는 발생하지 않습니다
[이벤트 error】
에러 발생 시 Trigger
client
【net.connect(options[,connectionListener])】
【net.createConnection(options[,connectionListener])】
connect()의 별칭 createConnection() 메소드
Method는 지정된 주소와 포트에 연결된 새로운 'net.Socket'을 반환합니다. 소켓이 설정되면 'connect' 이벤트가 트리거됩니다. 'net.Socket'과 같은 방식입니다
TCP 소켓의 경우 매개변수 옵션은 다음과 같습니다
port: 客户端连接到 Port 的端口(必须) host: 客户端要连接到得主机。默认 'localhost' localAddress: 网络连接绑定的本地接口 localPort: 网络连接绑定的本地端口 family : IP 栈版本。默认 4
로컬 도메인 소켓의 경우 매개변수 옵션은 다음과 같습니다
path: 客户端连接到得路径(必须)
var client = net.connect({port: 5000}, function() {});
Socket
【new net.Socket ([옵션])】
새 소켓 개체 생성
옵션 개체의 기본값은 다음과 같습니다.
{ fd: null allowHalfOpen: false, readable: false, writable: false }
fd 매개변수를 사용하면 기존 파일 설명자를 지정할 수 있습니다. 이 소켓에서 읽기 또는 쓰기를 허용하려면 읽기 및/또는 쓰기 가능을 true로 설정합니다(매개변수 fd가 유효한 경우에만)
【socket.connect(port[, 호스트][, connectListener])】
【socket.connect. (path[, connectListener])】
수신 소켓을 사용하여 연결을 엽니다. 포트와 호스트가 지정되면 TCP 소켓이 소켓을 엽니다. 호스트 매개변수를 생략하면 기본값은 localhost입니다. path를 지정하면 지정된 경로의 유닉스 소켓으로 소켓이 열립니다
connectListener 매개변수가 'connect' 이벤트에 리스너로 추가됩니다
【socket.write(data[, 인코딩][, callback) ])】
소켓으로 데이터를 보냅니다. 두 번째 매개변수는 문자열의 인코딩을 지정하며, 기본값은 UTF8 인코딩입니다
如果所有数据成功刷新到内核缓冲区,返回true。如果数据全部或部分在用户内存里,返回false。当缓冲区为空的时候会触发'drain'
当数据最终被完整写入的的时候,可选的callback参数会被执行,但不一定会马上执行
【socket.end([data][, encoding])】
半关闭socket。例如,它发送一个FIN包。可能服务器仍在发送数据。
如果参数data不为空,等同于调用socket.write(data,encoding)后再调用socket.end()
【socket.destroy()】
确保没有 I/O 活动在这个套接字上。只有在错误发生情况下才需要
【socket.pause()】
暂停读取数据。就是说,不会再触发 data 事件。对于控制上传非常有用
【socket.resume()】
调用 pause() 后想恢复读取数据
【socket.setTimeout(timeout[, callback])】
socket 闲置时间超过 timeout 毫秒后 ,将 socket 设置为超时。触发空闲超时事件时,socket 将会收到 'timeout'事件,但是连接不会被断开。用户必须手动调用 end() 或 destroy() 这个socket。
如果 timeout = 0, 那么现有的闲置超时会被禁用。可选的 callback 参数将会被添加成为 'timeout' 事件的一次性监听器
【socket.setNoDelay([noDelay])】
禁用纳格(Nagle)算法。默认情况下 TCP 连接使用纳格算法,在发送前他们会缓冲数据。将 noDelay 设置为 true 将会在调用 socket.write() 时立即发送数据。noDelay 默认值为 true
【socket.setKeepAlive([enable][, initialDelay])】
禁用/启用长连接功能,在发送第一个在闲置socket上的长连接probe之前,可选地设定初始延时。默认false
设定initialDelay(毫秒),来设定收到的最后一个数据包和第一个长连接probe之间的延时。将 initialDelay 设为0,将会保留默认(或者之前)的值。默认值为0
【socket.address()】
操作系统返回绑定的地址,协议族名和服务器端口。返回的对象有 3 个属性,比如{ port: 12346, family: 'IPv4', address: '127.0.0.1' }
【socket.remoteAddress】
远程的 IP 地址字符串
【socket.remoteFamily】
远程IP协议族字符串
【socket.remotePort】
远程端口,数字表示
【socket.localAddress】
远程客户端正在连接的本地IP地址,字符串表示
【socket.localPort】
本地端口地址,数字表示
【socket.bytesRead】
接收的字节数
【socket.bytesWritten】
发送的字节数
【事件lookup】
在解析域名后,但在连接前,触发这个事件。对 UNIX sokcet 不适用
err {Error | Null} 错误对象 address {String} IP 地址。 family {String | Null} 地址类型
【事件connect】
当成功建立 socket 连接时触发、
【事件data】
{Buffer object}
当接收到数据时触发。参数 data 可以是 Buffer 或 String
当 Socket 触发一个 'data' 事件时,如果没有监听器,数据将会丢失
【事件end】
当 socket 另一端发送 FIN 包时,触发该事件
【事件timeout】
当 socket 空闲超时时触发,仅是表明 socket 已经空闲。用户必须手动关闭连接
【事件drain】
当写缓存为空得时候触发。可用来控制上传
【事件error】
错误发生时触发
【事件close】
had_error {Boolean} 如果 socket 传输错误,为 true
当 socket 完全关闭时触发。参数 had_error 是 boolean,它表示是否因为传输错误导致 socket 关闭
简易服务器
【服务器】
//server.js var net = require('net') ; var server = net.createServer(function(socket) { socket.write("Hi!\n"); socket.on("data", function(data) { console.log(data.toString()); }); socket.on("end", function() { console.log('有客户机下线了!!!'); }); socket.on('error', function() { console.log('发生意外错误!!!'); }); }) ; server.listen(8080) ;
【客户机】
//client.js var net = require('net') ; var client = net.connect({port: 8080},function(){ client.name = '客户机1'; client.write(client.name + ' 上线了!\n'); client.end(client.name + ' 下线了!\n'); client.on("data", function(data) { console.log(data.toString()); }); });
简易聊天室
【服务器】
//chatServer.js var net = require('net'); var i = 0; //保存客户机 var clientList = []; var server = net.createServer(function(socket) { socket.name = '用户' + (++i); socket.write('【聊天室提示】欢迎' + socket.name + '\n'); //更新客户机数组 clientList.push(socket); function showClients(){ console.log('【当前在线用户】:'); for(var i=0;i<clientlist.length server.listen><p>【客户机】</p> <pre class="brush:php;toolbar:false">//chatClient.js var net = require('net'); process.stdin.resume(); process.stdin.setEncoding('utf8'); var client = net.connect({port: 8080},function(){ console.log('【本机提示】登录到聊天室'); process.stdin.on('data',function(data){ client.write(data); }) client.on("data", function(data) { console.log(data.toString()); }); client.on('end', function() { console.log('【本机提示】退出聊天室'); process.exit(); }); client.on('error', function() { console.log('【本机提示】聊天室异常'); process.exit(); }); });
更多编程相关知识,请访问:编程入门!!
위 내용은 nodejs의 net 모듈에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

Node.js는 크림 덕분에 효율적인 I/O에서 탁월합니다. 스트림은 메모리 오버로드를 피하고 큰 파일, 네트워크 작업 및 실시간 애플리케이션을위한 메모리 과부하를 피하기 위해 데이터를 점차적으로 처리합니다. 스트림을 TypeScript의 유형 안전과 결합하면 Powe가 생성됩니다

파이썬과 자바 스크립트 간의 성능과 효율성의 차이는 주로 다음과 같이 반영됩니다. 1) 해석 된 언어로서, 파이썬은 느리게 실행되지만 개발 효율이 높고 빠른 프로토 타입 개발에 적합합니다. 2) JavaScript는 브라우저의 단일 스레드로 제한되지만 멀티 스레딩 및 비동기 I/O는 Node.js의 성능을 향상시키는 데 사용될 수 있으며 실제 프로젝트에서는 이점이 있습니다.

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

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

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

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
