자바~하둡

python) Thread pickle socket

히드라✧ 2022. 2. 24. 18:40

TCP_Socket _ Server

In [1]:
class MsgObj:
    def __init__(self,num,msg):
        self.num=num
        self.msg=msg
    
    def __str__(self):
        return f'{self.num}\t{self.msg}'
In [2]:
from socket import * #socket.xxx
import time
import pickle

serverSock=socket(AF_INET,SOCK_STREAM)
serverSock.bind(('',1122)) # 1024 이후의 포트번호 이전은 많은 서버들이 이미 사용중
serverSock.listen()

print('서버 작동...') #실헹하면 보안경고창 표시됨, 액세스 허용
clientSock, addr = serverSock.accept() #튜플 리턴 (clentSock,addre)생략
print(str(addr),'클라이언트 접속됨')

msg = '서버에 접속 성공'
clientSock.send(msg.encode('utf-8')) #바이트 단위로 전송됨(문자열 이외도 가능)
#클라이언트가 접속해야 실행된다

# 직렬화된 오브젝트 수신
obj_bytes=clientSock.recv(1024*10)
msgObj = pickle.loads(obj_bytes)
print('서버에 전달된 오브젝트',msgObj)

time.sleep(1) #기다림 없이 서버가 끝나버려서 수신이 안될수 있다.

print('서버 종료')
 
서버 작동...
('127.0.0.1', 58964) 클라이언트 접속됨
서버에 전달된 오브젝트 11	잘 가야 할텐데.....
서버 종료

TCP_Socket _ Client

In [1]:
class MsgObj:
    def __init__(self,num,msg):
        self.num=num
        self.msg=msg
    
    def __str__(self):
        return f'{self.num}\t{self.msg}'
In [2]:
#Client
from socket import *
import pickle
import time

clientSock=socket(AF_INET, SOCK_STREAM)
clientSock.connect(('127.0.0.1',1122))

msg = clientSock.recv(1024) # 한번에 가져올 바이트 수 (부족하면 반복호출해야 함)
print(msg.decode('utf-8'))

mobj=MsgObj(11,'잘 가야 할텐데.....')
obj_bytes = pickle.dumps(mobj)

clientSock.send(obj_bytes)
time.sleep(1)

print('클라이언트 종료')
 
서버에 접속 성공
클라이언트 종료