Programming/웹프로그래밍

[NodeJS] TCP 서버프로그래밍 - net 모듈 이용하기

쌍쌍바나나 2016. 4. 4. 07:54
반응형

들어가며

  서버와 클라이언트 프로그래밍은 다양한 방법으로 할 수 있습니다. 그 net모듈을 사용하여 통신하는 서버 프로그래밍입니다. TCP/IP는 우리가 스타크래프트에서 네트워크 통신을 하며 게임을 해보았다면 익숙한 단어입니다. 아래 예제는 tcpserver.js와 tcpclient.js를 생성해 두개가 서로 데이터를 보내는 예제입니다. 최초 서버가 접속이 가능하도록 대기를 하고 있고, 클라이언트는 서버로 접속을 합니다. 접속된 connection을 통해 서로 데이터를 주고 받을 수 있습니다. 

소스코드

  소스코드는 tcpserver.js와 tcpclient.js로 구성되어 있습니다. 

tcpserver.js

  서버를 생성하기 위해서 net의 모듈을 상용합니다. net.createServer를 통해 서버 객체를 생성하고, listen을 통해 클라이언트가 5000번 포트를 통해 접속 할 수 있도록 동작을 시킵니다. createServer내부에는 callback함수가 들어있어 사용자가 요청을 하면 해당 함수가 호출이 됩니다. socket.on을 통해 다양한 기능을 구현할 수 있습니다. 'data'는  클라이언트가 전송한 데이터를 callback함수에 받아 console에 출력을 해주는 역할을 하고, 'close'를 통해 클라이언트가 접속이 끊기는 메시지를 출력할 수 있습니다.

var net = require('net');

// 서버를 생성
var server = net.createServer(function(socket){
	console.log(socket.address().address + " connected.");
	
	// client로 부터 오는 data를 화면에 출력
	socket.on('data', function(data){
		console.log('rcv:' + data);
	});
	// client와 접속이 끊기는 메시지 출력
	socket.on('close', function(){
		console.log('client disconnted.');
	});
	// client가 접속하면 화면에 출력해주는 메시지
	socket.write('welcome to server');
});

// 에러가 발생할 경우 화면에 에러메시지 출력
server.on('error', function(err){
	console.log('err'+ err	);
});

// Port 5000으로 접속이 가능하도록 대기
server.listen(5000, function(){
	console.log('linsteing on 5000..');
});

tcpclient.js

  클라이언트도 마찬가지로 net모듈을 사용합니다. 서버에서 접속을 허용하는 5000번 포트를 통해 연결을 하고, on메소드를 통해 'connect'되었을때 내부에 있는 callback함수를 호출합니다. 최초 'connected to server!'를 호출한 뒤에 1000ms 간격으로 'banana hong!'을 서버로 전송합니다. 'data', 'end', 'error', 'timeout'의 상황에서 호출이 가능한 callback함수를 생성했습니다. 

var net = require('net');

// 서버 5000번 포트로 접속
var socket = net.connect({port : 5000});
socket.on('connect', function(){
	console.log('connected to server!');
	
	// 1000ms의 간격으로 banana hong을 서버로 요청
	setInterval(function(){
		socket.write('banana hong!');
	}, 1000);
});

// 서버로부터 받은 데이터를 화면에 출력
socket.on('data', function(chunk){
	console.log('recv:' + chunk);
});
// 접속이 종료됬을때 메시지 출력
socket.on('end', function(){
	console.log('disconnected.');
});
// 에러가 발생할때 에러메시지 화면에 출력
socket.on('error', function(err){
	console.log(err);
});
// connection에서 timeout이 발생하면 메시지 출력
socket.on('timeout', function(){
	console.log('connection timeout.');
});

실행화면

  서버에서 5000번 포트를 열어놓고 접속을 대기하고 있습니다. 클라이언트에서는 5000번 포트를 통해 서버에 접속을하고, 접속을 하면 welcome to server라는메시지를 출력해줍니다. 서버에서는 클라이언트가 전송한 banana hong!의 메시지를 화면에 출력해줍니다.

[서버 화면] 서버에서 5000번 포트를 열고 클라이언트의 접속 대기중 ...


[서버 화면] 클라이언트가 서버에 접속하면 서버에서는 클라이언트에서 전송하는 'banana hong!' 메시지를 화면에 출력

[클라이언트 화면] 클라이언트에서는 서버에 접속하면 서버에서 전송하는 'welcome to server!'를 출력하고, 접속이 종료되면 'disconnected'를 출력

반응형