node.js net module :: net으로 클라이언트 접속해보기
by 으렴
지난 게시글에서 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반환
걍 기록
'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 |
사이트의 정보
코딩하렴
으렴