Juni_Dev_log

(node.js) Do it! 도전문제(1), (2) 본문

Theorem (정리)/node.js

(node.js) Do it! 도전문제(1), (2)

Juni_K 2020. 12. 7. 11:53

문제 1) 파일의 내용을 한 줄씩 읽어 들여 화면에 출력하는 기능을 만들어보자.

Hint)

1. 하나의 파일을 만들고 각 줄에는 공백으로 구분된 이름, 나이, 전화번호가 들어가도록 구성한다.

2. 파일의 내용을 한 줄씩 읽어 들이면서 각 정보를 공백으로 구분한다.

3. 구분된 정보 중에서 이름만 화면에 출력한다.

 

(customer.txt)

아무무 15 010-1111-2222
말파이트 20 010-3333-4444
마오카이 24 010-5555-6666

(mission1.js)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var fs = require('fs');
var readline = require('readline');
 
// 한 줄씩 읽어들이는 함수 정의
function processFile(filename){
    var instream = fs.createReadStream(filename);
    var reader = readline.createInterface(instream, process.stdout);
    
    var count = 0;
    // 한 줄씩 읽어들인 후에 발생하는 이벤트
    reader.on('line'function(line){
        console.log('한 줄 읽음 : ' + line);
        
        count += 1;
        
        // 공백으로 구분
        var tokens = line.split(' ');
        
        if (tokens != undefined && tokens.length > 0){
            console.log('#' + count + ' -> ' + tokens[0]);
        }
    });
    
    reader.on('close'function(line){
        console.log('파일을 모두 읽음.');
    });
}
 
var filename = 'C:/Users/kks13/OneDrive/바탕 화면/Dev/Study/nodejs/nodejs_study/NodeExample1/연습문제/customer.txt';
processFile(filename);
 
cs

(console 출력 결과)

한 줄 읽음 : 아무무 15 010-1111-2222
#1 -> 아무무
한 줄 읽음 : 말파이트 20 010-3333-4444
#2 -> 말파이트
한 줄 읽음 : 마오카이 24 010-5555-6666
#3 -> 마오카이
파일을 모두 읽음.

- fs 모듈

① fs.createReadStream() 을 통해서, 메모장에 적은 내용을 스트림으로 읽어온다.

 

- readline 모듈

nodejs.sideeffect.kr/docs/v0.8.20/api/readline.html

 

Readline Node.js v0.8.20 Manual & Documentation

Readline# Stability: 2 - Unstable To use this module, do require('readline'). Readline allows reading of a stream (such as process.stdin) on a line-by-line basis. Note that once you've invoked this module, your node program will not terminate until you've

nodejs.sideeffect.kr

① readline.createInterface(instream, process.stdout) 으로 인터페이스를 만든다.

② reader.on() 으로 line 이벤트를 발생시켜서 한 줄씩 line 을 읽는다. 

③ 체크하기 위해서 count 를 추가한다.

④ split() 을 사용해서 공백을 기준으로 나눈다.

⑤ if 문을 통해서, 정의되지 않은(undefined) 경우가 아닌 경우 (즉, 정의된 경우) / 배열의 길이가 0보다 큰 경우 일 때,

console.log() 로 출력을 진행한다.

⑥ reader.on() 으로  close 이벤트를 발생시켜서 인터페이스를 종료한다. 종료하면서, console.log()를 찍어준다.  

 

문제 2) 소켓 서버와 소켓 클라이언트 기능을 노드로 구성하여 소켓 클라이언트에서 데이터를 보내면 소켓 서버에서 다시 돌려주는 기능을 만들어보자.

Hint)

1. 노드의 소켓 기능을 이용해 소켓 서버와 소켓 클라이언트를 만든다.

2. 소켓 클라이언트에서는 소켓 서버로 연결한다.

3. 소켓 클라이언트에서 소켓 버서로 '안녕!' 과 같은 글자를 보내면 소켓 서버에서 그 글자를 그대로 다시 소켓 클라이언트로 보낸다.

4. 소켓 클라이언트와 소켓 서버에서는 보내고 받은 데이터를 화면에 출력한다.

 

(server.js)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var net = require('net');
 
// 소켓 서버 생성
var server = net.createServer(function(socket){
    //연결된 클라이언트 정보 확인
    socket.name = socket.remoteAddress + ':' + socket.remotePort;
    console.log('클라이언트 연결됨 -> ' + socket.name);
    
    //클라이언트로부터 메세지를 받았을 때 발생하는 이벤트
    socket.on('data',function(data){
        console.log('클라이언트로부터 받은 데이터 : ' + data);
        
        // 받은 메세지를 돌려줌
        socket.write(data + ' from server.');
    });
    
    //클라이언트 연결이 끊어진 경우
    socket.on('end',function(){
        console.log('클라이언트로부터 연결 끊어짐 -> ' + socket.name);
    });
});
 
// 소켓 서버 실행
var port = 3000;
server.listen(port);
 
console.log('소켓 서버 실행됨 : ' + port);
cs

(client.js)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var net = require('net');
 
var hostname = 'localhost';
var port = 3000;
 
// 서버에 연결
var client = new net.Socket();
client.connect(port, hostname, function(){
    console.log('서버에 연결됨 -> ' + hostname + ':' + port);
    client.write('안녕');
});
 
// 서버로부터 데이터를 받았을 때 발생하는 이벤트
client.on('data'function(data){
    console.log('서버로부터 받은 데이터 -> '+ data);
    
    //클라이언트 연결 종료
    client.destory();
});
 
client.on('close'function(){
    console.log('연결 끊어짐.');
});
cs

 

- net 모듈

ourcstory.tistory.com/67

 

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

들어가며 서버와 클라이언트 프로그래밍은 다양한 방법으로 할 수 있습니다. 그 net모듈을 사용하여 통신하는 서버 프로그래밍입니다. TCP/IP는 우리가 스타크래프트에서 네트워크 통신을 하며

ourcstory.tistory.com

- socket

mylko72.gitbooks.io/node-js/content/chapter8/chapter8_3.html

 

TCP 소켓 서버와 클라이언트 구현 | Node.js & MongoDB

 

mylko72.gitbooks.io

kimyc1223.github.io/2019-11-27-HoloLens004/

 

NodeJS와 소켓 통신 연결 (NodeJS UDP&TCP Example)

이번에 회사에서 진행하는 HoloLens to Driver Controller부분 구현과, 친한 동아리 선배와 함께 진행하는 프로젝트의 서버 부분 구현을 하게 되었는데, 이때 두 파트 동시에 Socket통신을 하도록 요구받

kimyc1223.github.io

[server.js]

net.createServer 를 통해서 서버 객체를 생성한다.

listen 을 통해서 클라이언트가 해당 포트를 통해서 접속할 수 있도록 동작을 시킨다.

createServer 내부에는 콜백함수가 들어있어 사용자가 요청하면 해당 함수가 호출된다.

socket.on() 을 통해서 다양한 기능을 구현할 수 있다.

data 는 클라이언트가 전송한 데이터를 callback 함수에 받아서 console에 출력을 해주는 역할을 하고, 'close'를 통해 클라이언트가 접속이 끊기는 메시지를 출력할 수 있다.

 

[client.js]

① 서버에서 접속을 허용하는 5000번 포트를 통해 연결을 하고, on메소드를 통해 'connect' 되었을 때 내부에 있는 callback 함수를 호출한다.

② 'data', 'end', 'error' , 'timeout' 등의 다양한 상황에서 호출이 가능한 callback 함수를 생성한다.

 

Comments