Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- python
- 파이썬
- php
- 자바스크립트 node
- 카카오프로젝트
- 자바스크립트
- 자바스크립트 jQuery
- 보안뉴스한줄요약
- numpy
- oracle db
- 자바스크립트 객체
- Oracle SQL
- 보안뉴스
- 보안뉴스요약
- ES6
- 보안뉴스 요약
- GIT
- 자바스크립트 prototype
- 보안뉴스 한줄요약
- 랜섬웨어
- 카카오프로젝트100
- oracle
- 카카오프로젝트 100
- 자바스크립트 element api
- 깃허브
- 자바스크립트 API
- 다크웹
- 오라클
- 자바스크립트 기본 문법
- javascript
Archives
- Today
- Total
FU11M00N
[ python ] socket 프로그래밍 - 다양한 데이터 보내기 (feat. pickle 직렬화) 본문
- mynetlib.py
import socket
import pickle
# =============================================================================
# 서버 코드
# =============================================================================
def run_server(port,do_work_server,s_count=1):
# 1. 초기화
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. bind
server.bind(('',port))
# 3. listen
server.listen(1)
# 4. accept
while s_count > 0:
print('클라이언트 접속을 기다립니당나귀')
client,addr = server.accept()
do_work_server(client, addr)
client.close()
s_count-=1
server.close()
# =============================================================================
# 클라이언트 코드
# =============================================================================
def run_client(ip,port,do_work_client):
# 1. 초기화
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. connect
print('서버에 접속을 시도중 !')
client.connect((ip,port))
print('서버 접속 완료!')
do_work_client(client)
client.close()
print('접속 종료 *^^*')
# =============================================================================
# 공통 코드
# =============================================================================
def my_recv(B_SIZE,client):
data = client.recv(B_SIZE)
if not data:
return data
cmd = pickle.loads(data)
return cmd
def my_send(cmd, client):
data = pickle.dumps(cmd) # 직렬화
client.sendall(data)
return 0
mynetlib 은 서버가 통신할때 필요한 모듈과 클라이언트가 통신에 필요한 모듈을 작성한 코드입니다.
run_server() 함수는 서버가 통신할때에 필요한 모듈입니다.
소켓프로그래밍에서 서버는 기본적으로
1. 초기화
2. bind
3. listen
4. accept
순서를 지켜야합니다.
run_client() 함수는 클라이언트가 통신할때 필요한 모듈입니다.
클라이언트는 기본적으로
1. 초기화
2. connect
순서를 지켜야합니다.
my_recv() 함수와 my send() 함수는 데이터를 주고 받기위한 함수입니다.
my_send() 함수는 데이터를 보낼때 쓰이는 함수입니다. cmd 파라미터에 어떤 데이터가 올지 모르기에( 클래스 , 문자, 숫자, 리스트 등) pickle 모듈을 사용한것입니다.
my_recv() 함수는 데이터를 받을때 함수입니다.
- server.py
import mynetlib
def do_work_server(client, addr):
print('client :', addr)
cmd_r = mynetlib.my_recv(1024, client)
print(cmd_r[0], cmd_r[1])
a = cmd_r[0]
b = cmd_r[1]
cmd_s = [a+b,a-b,a*b]
mynetlib.my_send(cmd_s,client)
mynetlib.run_server(2023, do_work_server,1)
server.py 파일은 처음 서버가 실행되고 클라이언트와 연결을 기다리며 클라이언트측에서 보낸 데이터를 받아 연산하고 데이터를 돌려줍니다.
해당 코드에서는 list 데이터를 전송합니다.
- client.py
import mynetlib
def do_work_client(client):
print('클라이언트 열일중')
para1 = 77
para2 = 23
cmd = [para1,para2]
mynetlib.my_send(cmd, client)
cmd_r = mynetlib.my_recv(1024, client)
print('+:',cmd_r[0],'\n-:',cmd_r[1],'\n*:',cmd_r[2])
mynetlib.run_client('localhost', 2023, do_work_client)
클라이언트 측은 서버에게 데이터를주는 역할을합니다.
'Programming > Python' 카테고리의 다른 글
[ Python ] 파이썬 Diffie-Hellman 구현 (0) | 2021.05.21 |
---|---|
[ Python ] RC4 알고리즘 (0) | 2021.04.08 |
[ Python ] python SHA512값 구하기 , SHA512 특징, SHA512 처리 단계 , (0) | 2021.03.26 |
[ Python ] 아나콘다 (Anaconda) 설치하기. (0) | 2021.03.12 |
[Python] 연산자 오버로딩 (0) | 2020.11.24 |
Comments