코딩하렴

node.js net module :: net으로 클라이언트 접속해보기

by 으렴

 

 

node.js net module :: net으로 서버 열기

net module socket 전송 제어 프로토콜 TCP를 사용해 원시데이터를 전송. 두가지 형태(server, client)로 존재하며 서버간의 지점 대 지점 통신을 제공. 서버는 연결을 수신, 클라이언트는 서버에 연결을 요청. 이..

ryeom2.tistory.com

지난 게시글에서 net으로 서버를 열었다.

 

이번에는 client로 간단히 데이터를 주고 바로 끄는 작업을 할 것이다.

var net = require('net');

function getConnection(connName){
  var client = net.connect({port: 2222, host:'localhost'}, function() {
    console.log(connName + ' 연결 됨.');
    console.log(`로컬 : ${this.localAddress} / ${this.localPort}`);
    console.log(`리모트 : ${this.remoteAddress} / ${this.remotePort}`);
    //this라고 써도 됨. this = client

    client.setTimeout(500);
    client.setEncoding('utf8');

    this.on('data', function(data) {
      console.log(connName + " 한테서 데이터가 옴: " + data.toString());
      client.end();
    });
    client.on('end', function() {
      console.log(connName + '커넥션이 끄너져떠');
    });
    client.on('error', function(err) {
      console.log('에라쓰 : ', JSON.stringify(err));
    });
    client.on('timeout', function() {
      console.log('소켓 타임아웃');
    });
    client.on('close', function() {
      console.log('소켓 닫힘');
    });
  });
  return client;
}

function writeData(socket, data){
  var success = !socket.write(data);
  if (!success){
    (function(socket, data){
      socket.once('drain', function(){
        writeData(socket, data);
      });
    })(socket, data);
  }
}


var user = getConnection("user");
writeData(user, "user가 접속해따요!!!!!!!!!!!!!!!!!!!!!!");

 

이렇게 작성했다.

서버를 열면

서버는 이런식으로 열리고 누가 들어오면 작업을 진행하도록 한다.

 

클라이언트를 실행하면 연결시키고 바로 소켓을 닫아버리게 만들어놨다.

 

var socket = [];

socket.connect(port,host,connectListener);
socket.connect(path,connectionListener);
//일반적으로 net.connect 래핑함수를 호출하여 소켓을 열기때문에
//사용자 정의 소켓을 구현해야 할 경우에만 사용
//connectListener매개변수는 connect이벤트에 대한 리스너로서 추가된다.

socket.bufferSize

socket.setEncoding('utf8')
//읽을 스트림으로 소켓에 대한 인코딩을 설정.

socket.write(data,encoding,callback);
//소켓에 데이터를 보낼 수 있는 메소드
//데이터의 기본 인코딩은 UTF8
//버퍼에 쌓인 데이터가 성공적으로 전송되었으면 true 반환
//buffer가 모두 비워졌을 경우에 drain이벤트가 발생한다.

socket.end(data,encoding);
//write 메소드와 기능은 같지만 일부 스트림만 종료하며 fin패킷을 보냄
//이때 서버가 일부 데이터를 보낼 수 있다. TCP half-close

socket.destroy()
//소켓의 i/o활동을 발생하지 않게하는 메소드
//에러 발생시 필요하다

socket.pause()
//데이터 읽기를 중지하며 data이벤트는 발생되지 않는다.

socket.resume()
//데이터 읽기를 재개

socket.setTimeout(timeout, callback);
/*
소켓에 설정된 초과시간이 지나면 timeout이벤트가 발생하며
callback매개변수는 timeout이벤트의 리스너로서 추가된다.
참고로 timeout 이벤트가 발생하여도 커넥션은 유지된다.
커넥션을 끊기 위해서는 사용자가 end메소드나 destroy메소드를 호출해야함.
*/

socket.setNoDelay(noDelay);

socket.setKeepAlive(enable,initialDelay);
//keep-Alive기능의 활성화 유무를 설정하는 메소드
//기본적으로 비활성화 되어있으며 지연시간을 설정할 수 있음

socket.address()
//ip주소와 포트번호와 같은 서버 정보를 운영체제로부터 가져온다.

socket.remoteAdress
//원격 ip주소를 가지는 프로퍼티

socket.remotePort
//원격 포트를 가지는 프로퍼티

socket.bytesRead
//소켓이 받은 총 바이트 수를 가지는 프로퍼티

socket.bytesWritten
//소켓에 보낸 총 바이트 수를 가지는 프로퍼티

socket.on(event,listener);

socket.on('connect',function(){ /* 내용물 */});     
socket.on('data',function(){ /* 내용물 */});
socket.on('end',function(){ /* 내용물 */});
socket.on('timeout',function(){ /* 내용물 */});
socket.on('error',function(){ /* 내용물 */});
socket.on('close',function(){ /* 내용물 */});


net.isIP(input)
//입력된 ip의 버전을 반환한다.

net.isIPv4(input)
//입력된 ip의 버전이 4일경우 true반환
net.isIPv6(input)
//입력된 ip의 버전이 6일경우 true반환

 

걍 기록

 

참고 : https://www.slideshare.net/seogi1004/net-16754032

https://nodejs.org/api/net.html#net_class_net_socket

'Web > JAVASCRIPT' 카테고리의 다른 글

javascript의 function활용에 대하여  (0) 2019.07.30
javascirpt 기초를 잡자  (0) 2019.07.29
node.js net module :: net으로 서버 열기  (0) 2019.07.21
Node.js 설치하기  (0) 2019.07.04
VSCode ; Visual Studio Code 설치하기  (0) 2019.07.02

사이트의 정보

코딩하렴

으렴

활동하기