티스토리 뷰
반응형
다른 강의자료는 www.codingnow.co.kr/ 여기를 참고해주세요.!!
이번 강의는 실무 개발 당시에 필요했던 기능으로 소켓 통신에 대해 다룹니다.
c언어 기반의 툴과 node.js 기반의 환경에 데이타를 주고 받으려면 어떻게 해야하지 고민중에 대학시절 채팅 프로그램을 만들때 사용한 소켓 통신을 응용하여 처리한 경험이 있습니다.
개발자는 깊게는 못해도 이것저것의 존재를 알아두는 것이 재산이 될때가 있습니다.
자세한 내용은 첨부된 동영상을 참고해주세요.
[소스코드 ]
아래 파일을 참고하거나 홈페이지에 깃서버 주소를 참고해주세요.
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");
}
}
반응형
'파이썬 강의' 카테고리의 다른 글
chatGPT를 사용한 파이썬의 삼각형 그리기 (0) | 2023.02.08 |
---|---|
파이썬 기초 활용편 #문자인식 #이미지보정 #tesseract #opencv (0) | 2022.07.08 |
파이썬 기초 활용편 #파일추출하기와 웹크롤링 (비트코인 종목 가져오기) (0) | 2022.05.09 |
파이썬 기초 활용편 구구단 출력하기 (0) | 2022.05.01 |
파이썬 기초 활용편 #타임랩스 동영상 제작 툴 만들기 (0) | 2022.01.24 |