사용자 도구

사이트 도구


nodejs:echoserverclient

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
nodejs:echoserverclient [2013/05/20 03:04] – [클라이언트] C/파이썬 구현은 생략. changwoonodejs:echoserverclient [2013/07/17 14:41] (현재) – 삭제함 changwoo
줄 1: 줄 1:
-====== node.js 에코 서버와 클라이언트 제작해보기 ====== 
  
-node.js 기반의 에코 서버, 파이썬 기반으로 대응되는 간단한 콘솔 클라이언트를 제작해봅니다. 
- 
-===== 시놉시스 ===== 
-==== 서버 ==== 
-  - 클라이언트가 접속하면 접속하였다는 메시지를 출력합니다. 
-  - 클라이언트로부터 메시지를 받으면 받은 메시지를 그대로 출력하고, 클라이언트로 되돌려 보냅니다. 
-  - 클라이언트로부터 접속이 종료되면 종료 메시지를 출력합니다. 
- 
-==== 클라이언트 ==== 
-  - 서버에 접속하면 접속했다는 메시지를 출력합니다. 
-  - 서버에 메시지를 보냅니다. 받은 메시지는 서버에 전달되었다가, 그대로 서버로부터 전달받습니다. 
-  - <del>클라이언트는 간단하게 C, 파이썬으로 구현해봅니다.</del> 
- 
-===== 서버측 구현===== 
-<code javascript echo_server.js> 
-// 필요한 객체를 선언합니다. 
-var net  = require('net'); 
-var port = 9000; 
- 
-// 소켓에 필요한 핸들러는 이 곳에 미리 선언합니다. 
-function server_handler(socket) 
-{ 
-    socket.on('connect', onSocketConnect); 
-    //socket.on('data',    onSocketData); 
-    socket.on('end',     onSocketEnd); 
-    socket.on('timeout', onSocketTimeOut); 
-    socket.on('drain',   onSocketDrain); 
-    socket.on('error',   onSocketError); 
-    socket.on('close',   onSocketClose); 
-     
-    // socket에 효과적으로 접근하기 위해서는 이 방법이 효과적입니다. 
-    socket.on('data', function (buffer) { 
-        onSocketData(socket, buffer) 
-    }); 
-} 
- 
-// net.Socket event handlers 
-function onSocketConnect() 
-{ 
-    console.log('onSocketConnect: connection established'); 
-} 
- 
-function onSocketData(socket, buffer) 
-{ 
-    console.log('onSocketData: data received'); 
-    process.stdout.write(buffer); 
-     
-    if(socket.write(buffer)) 
-        console.log('onSocketData: data echoed successfully'); 
-    else 
-        console.log('onSocketData: some error occured :('); 
-} 
- 
-// emitted when the other side of the socket sends a FIN packet 
-function onSocketEnd() 
-{ 
-    console.log('onSocketEnd: a client sent a FIN packet.'); 
-} 
- 
-function onSocketTimeOut() 
-{ 
-    console.log('onSocketTimeOut: called.'); 
-} 
- 
-// when the write buffer becomes empty 
-function onSocketDrain() 
-{ 
-    console.log('onSocketDrain: called.'); 
-} 
- 
-function onSocketError(err) 
-{ 
-    console.log('onSocketError: called.'); 
-} 
- 
-function onSocketClose(had_error) 
-{ 
-    console.log('onSocketClose: connection closed.'); 
-     
-    if(had_error) 
-    { 
-        console.log('onSocketClose: some error happend :('); 
-    } 
-    else 
-    { 
-        console.log('onSocketClose: no error :)'); 
-    } 
-} 
- 
- 
-// net.Server event handler 
-function onServerListening() 
-{ 
-    console.log('onServerListening: listening on port ' + port); 
-    console.log('Press \'x\' to exit...'); 
-} 
- 
-function onServerConnection(socket) 
-{ 
-    var ip   = socket.remoteAddress; 
-    var port = socket.remotePort; 
-         
-    console.log('onServerConnection: connection received from '+ip+':'+port);     
-} 
- 
-function onServerClose() 
-{ 
-    console.log('onServerClose: server closed'); 
-    process.exit(0); 
-} 
- 
-function onServerError(err) 
-{ 
-     console.log('onServerError: called'); 
-} 
- 
-function onStdinData(server, data) 
-{ 
-    console.log('onStdinData: '+data); 
-    console.log('onStdinData: length '+data.length); 
-    if(data == 'x\n') 
-    { 
-        console.log('onStdinData: termination command received'); 
-        server.close(); 
-        process.exit(0); 
-    } 
-} 
- 
-function onStdinEnd() 
-{ 
-    console.log('onStdinEnd: called'); 
-} 
- 
- 
-//////////////////////////////////////////////////////////////////////////////// 
-// Beginning 
-// argument parsing 
-if (process.argv.length != 3) 
-{ 
-    console.log('Usage: node echo_server.js <port>'); 
-    process.exit(0);     
-} 
-else 
-{ 
-    port = process.argv[2] 
-} 
- 
-// 서버 생성 
-var server = net.createServer(server_handler); 
-// 서버의 이벤트를 설정합니다. 
-// server.on('data', ); 
-server.on('listening',  onServerListening); 
-server.on('connection', onServerConnection); 
-server.on('close',      onServerClose); 
-server.on('error',      onServerError); 
-// 서버는 대기 
-server.listen(port); 
-// stdin 활성화 
-process.stdin.resume(); 
-process.stdin.on('data', function(data){onStdinData(server, data);}); 
-process.stdin.on('end', onStdinEnd); 
-</code> 
- 
-==== 사용법 ==== 
-  node echo_server.js 9000 
-   
- 
- 
-===== 클라이언트 측 스크립트 ===== 
-<code javascript echo_client.js> 
-// 필요한 객체를 선언합니다. 
-var net  = require('net'); 
- 
-// net.Socket event handlers 
-function onSocketConnect() 
-{ 
-    console.log('onSocketConnect: connection established'); 
-} 
- 
-function onSocketData(socket, buffer) 
-{ 
-    console.log('onSocketData: data received'); 
-    process.stdout.write(buffer); 
-} 
- 
-// emitted when the other side of the socket sends a FIN packet 
-function onSocketEnd() 
-{ 
-    console.log('onSocketEnd: a client sent a FIN packet.'); 
-} 
- 
-function onSocketTimeOut() 
-{ 
-    console.log('onSocketTimeOut: called.'); 
-} 
- 
-// when the write buffer becomes empty 
-function onSocketDrain() 
-{ 
-    console.log('onSocketDrain: called.'); 
-} 
- 
-function onSocketError(err) 
-{ 
-    console.log('onSocketError: called.'); 
-} 
- 
-function onSocketClose(had_error) 
-{ 
-    console.log('onSocketClose: connection closed.'); 
-     
-    if(had_error) 
-    { 
-        console.log('onSocketClose: some error happend :('); 
-    } 
-    else 
-    { 
-        console.log('onSocketClose: no error :)'); 
-    } 
-     
-    process.exit(0); 
-} 
- 
-function onStdinData(socket, data) 
-{ 
-    socket.write(data); 
-    console.log('onStdinData: data sent'); 
-} 
- 
- 
-//////////////////////////////////////////////////////////////////////////////// 
-// Beginning 
-// argument parsing 
-if (process.argv.length != 4) 
-{ 
-    console.log('Usage: node echo_client.js <host> <port>'); 
-    process.exit(0);     
-} 
- 
-var host = process.argv[2]; 
-var port = process.argv[3]; 
- 
-// 소켓 생성 
-var options = {'port': port, 'host': host}; 
-var socket  = net.createConnection(options); 
- 
-// 핸들러 설정 
-socket.on('connect', onSocketConnect); 
-socket.on('end',     onSocketEnd); 
-socket.on('timeout', onSocketTimeOut); 
-socket.on('drain',   onSocketDrain); 
-socket.on('error',   onSocketError); 
-socket.on('close',   onSocketClose); 
- 
-// socket에 효과적으로 접근하기 위해서는 이 방법이 효과적입니다. 
-socket.on('data', function (buffer) { 
-    onSocketData(socket, buffer) 
-}); 
- 
-// stdin 활성화 
-process.stdin.resume(); 
-process.stdin.on('data', function(data){onStdinData(socket, data);}); 
-</code> 
- 
-==== 사용법 ==== 
-  node echo_client.js 127.0.0.1 9000 
-   
nodejs/echoserverclient.1369019084.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki