Node.js

[Node.js] 공부 3 일차 - TCP 서버 및 클라이언트

남익 2017. 8. 13. 17:40
반응형

[Node.js] 공부 3 일차


개발환경

 - OS : windows

 - 개발툴 : Brackets

 - Node.js 버전 : 6.11.1 LTS


TCP 서버, 클라이언트 소스 생성하기         

Client 에서 Server로 메시지 전송 시 Server에서 송신된 메시지를 그대로 전송해주는 에코 서버를 구성하여 확인


1.tcpServer.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var net_server = require('net');
 
var server = net_server.createServer(function(client) {
  
    console.log('Client connection: ');
    console.log('   local = %s:%s', client.localAddress, client.localPort);
    console.log('   remote = %s:%s', client.remoteAddress, client.remotePort);
    
    client.setTimeout(500);
    client.setEncoding('utf8');
    
    client.on('data'function(data) {
        console.log('Received data from client on port %d: %s', client.remotePort, data.toString());
        
        writeData(client, 'Sending: ' + data.toString());
        console.log('  Bytes sent: ' + client.bytesWritten);
    });
    
    client.on('end'function() {
        console.log('Client disconnected');
    });
    
    client.on('error'function(err) {
        console.log('Socket Error: ', JSON.stringify(err));
    });
    
    client.on('timeout'function() {
        console.log('Socket Timed out');
    });
});
 
server.listen(9090function() {
    console.log('Server listening: ' + JSON.stringify(server.address()));
    server.on('close'function(){
        console.log('Server Terminated');
    });
    server.on('error'function(err){
        console.log('Server Error: ', JSON.stringify(err));
    });
});
 
function writeData(socket, data){
  var success = socket.write(data);
  if (!success){
    console.log("Client Send Fail");
  }
}
cs


2.tcpClient.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
var net_client = require('net'); 
 
function getConnection(){
    //서버에 해당 포트로 접속 
    var client = ""
    var recvData = [];  
    var local_port = ""
 
    client = net_client.connect({port: 9090, host:'localhost'}, function() {
     
        console.log("connect log======================================================================"); 
        console.log('connect success'); 
        console.log('local = ' + this.localAddress + ':' + this.localPort); 
        console.log('remote = ' + this.remoteAddress + ':' +this.remotePort); 
     
        local_port = this.localPort; 
     
        this.setEncoding('utf8'); 
        this.setTimeout(600000); // timeout : 10분 
        console.log("client setting Encoding:binary, timeout:600000" ); 
        console.log("client connect localport : " + local_port);
    }); 
 
    // 접속 종료 시 처리 
    client.on('close'function() { 
        console.log("client Socket Closed : " + " localport : " + local_port); 
    }); 
 
// 데이터 수신 후 처리 
    client.on('data'function(data) { 
        console.log("data recv log======================================================================"); 
        recvData.push(data); 
        console.log("data.length : " + data.length);
        console.log("data recv : " + data);
        client.end();
    }); 
 
    client.on('end'function() { 
        console.log('client Socket End'); 
    }); 
     
    client.on('error'function(err) { 
        console.log('client Socket Error: '+ JSON.stringify(err)); 
    }); 
     
    client.on('timeout'function() { 
        console.log('client Socket timeout: '); 
    }); 
     
    client.on('drain'function() { 
        console.log('client Socket drain: '); 
    }); 
     
    client.on('lookup'function() { 
        console.log('client Socket lookup: '); 
    });  
    return client;
}
 
function writeData(socket, data){
  var success = !socket.write(data);
  if (!success){
      console.log("Server Send Fail");
  }
}
 
var client = getConnection();
writeData(client, "에코 서버 테스트입니다.");
cs

tcp 서버 및 클라이언트 결과 확인         

1. tcpServer.js 구동 시키기  

1
Server listening: {"address":"::","family":"IPv6","port":9090}
cs

 - tcp 서버 구동하여 listen 상태로 대기

2. tcpClient.js 구동 시키기  

1
2
3
4
5
6
7
8
9
10
11
connect log======================================================================
connect success
local = 127.0.0.1:55449
remote = 127.0.0.1:9090
client setting Encoding:binary, timeout:600000
client connect localport : 55449
data recv log======================================================================
data.length : 22
data recv : Sending: 에코 서버 테스트입니다.
client Socket End
client Socket Closed :  localport : 55449
cs
 - tcp 클라이언트에서 tcp 서버에 접속한다.

 - 연결된 서버로 "에코 서버 테스트입니다." 메시지를 전송한다.

 - tcp 서버로부터 "에코 서버 테스트입니다." 메시지를 송신받는다.

 - 메시지 수신 후 접속 상태를 끊는다.

3. tcpServer.js 로그 확인하기  

1
2
3
4
5
6
Client connection: 
   local = ::ffff:127.0.0.1:9090
   remote = ::ffff:127.0.0.1:55449
Received data from client on port 55449: 에코 서버 테스트입니다.
  Bytes sent: 42
Client disconnected
cs

 - tcp 클라이언트 접속을 확인한다.

 - 접속된 클라이언트에서 송신한 메시지를 확인한다.

 - 접속된 클라이언트로 수신받은 메시지를 재송신한다.

 - 클라이언트에서 접속이 끊어지는 것을 확인한다.


반응형