티스토리 뷰

반응형

 

다른 강의자료는 www.codingnow.co.kr/ 여기를 참고해주세요.!!

 

코딩나우

프로그래밍 교육및 개발의뢰 받습니다.

www.codingnow.co.kr

 

https://youtu.be/QEysA3_eYpA

 

 

 

 

이번 강의는 실무 개발 당시에 필요했던 기능으로 소켓 통신에 대해 다룹니다.

c언어 기반의 툴과 node.js 기반의 환경에 데이타를 주고 받으려면 어떻게 해야하지 고민중에 대학시절 채팅 프로그램을 만들때 사용한 소켓 통신을 응용하여 처리한 경험이 있습니다.

개발자는 깊게는 못해도 이것저것의 존재를 알아두는 것이 재산이 될때가 있습니다.

자세한 내용은 첨부된 동영상을 참고해주세요.

 

[소스코드 ]

아래 파일을 참고하거나 홈페이지에 깃서버 주소를 참고해주세요.

project.zip
0.00MB

socket_server.py

import socket
from _thread import *
import json

class socketServer():
    client_sockets = [] #클라이언트 목록
    HOST = '127.0.0.1'
    PORT = 9999

    def __init__(self):
        print('>> Server Start')
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.server_socket.bind((self.HOST, self.PORT))
        self.server_socket.listen()

    def server_run(self):
        try:
            while True:
                print('>> Wait')
                client_socket, addr = self.server_socket.accept()
                self.client_sockets.append(client_socket)
                start_new_thread(self.thread_client, (client_socket, addr))
                print("연결된 수 : ", len(self.client_sockets))
        except Exception as e:
            print('socketServer error : ', e)
        finally:
            self.server_socket.close()            

    def thread_client(self,client_socket, addr):
        print('>> Connected by :', addr[0], ':', addr[1])
        while True:
            data = client_socket.recv(1024*10)
            if not data:
                print('>> Disconnected by ' + addr[0], ':', addr[1])
                break
            print('>> Received from ' + addr[0], ':', addr[1])
            client_socket.send(data)#echo to client
            try:
                json_string = data.decode()
                json_string = json.loads(json_string)
                # print(json_string['state'])
                print(json_string)
            except Exception as ex:
                print('socketServer json.loads :', ex)
                continue

server = socketServer()
server.server_run()

socket_client.py

from _thread import *
import json
import socket
import time

class socketClient():
    
    HOST = '127.0.0.1'
    PORT = 9999
    json_object = {
        "state": 'change',
        "ticker": "BTC",
        "buy_limit": 2000
    }

    def __init__(self):
        super().__init__()
        self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.client_socket.connect((self.HOST, self.PORT))
        self.alive = True

    def client_run(self):
        start_new_thread(self.recv_data, (self.client_socket,))
        print('>> Connect Server')
        
        while self.alive:
            print('json :',self.json_object)
            json_string = json.dumps(self.json_object)
            self.client_socket.send(json_string.encode())
            time.sleep(10)                       
        self.client_socket.close()

    def recv_data(self,client_socket):
        while True:
            try:
                data = client_socket.recv(1024)
                print("recive : ", repr(data.decode()))
            except ConnectionResetError as ex:
                break
            except Exception as ex:
                print(ex)
        self.alive = False

client = socketClient()
client.client_run()

js.node server

index.js

//https://nodejs.org/ko/
//npm install --save socket.io
//npm install --save http
//npm install --save express
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 : %s', data.toString());
    });
    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(9999, function () {
    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");
    }
}
반응형