C와 Python 소켓 데이터 연동
C에서 소켓으로 스트럭쳐 데이터를 send하고Python에서 소켓으로 데이터를 받아 스트럭쳐의 밸류값을 recv, 다시 데이터를 send하는 에코 서버 로직을 구현해 보았다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # Python server simulator # 133 사이즈의 데이터를 소켓으로 recv하고 받았던 곳으로 다시 준다. # struct.unpack시에 '='인자를 포함함으로써 padding byte를 제거 하고 C에서 # "#pragma pack(1)"과 같은 역할을 하게 한다. dataFormat = '=' dataFormat += '20s' # 스트링 20 byte dataFormat += '4s' dataFormat += '2s' dataFormat += '2s' dataFormat += '10s' dataFormat += 'c' # char 1byte dataFormat += '2s' dataFormat += '38s' dataFormat += 'c' dataFormat += 'c' dataFormat += '2s' dataFormat += '2s' dataFormat += '9s' dataFormat += '8s' dataFormat += '8s' dataFormat += '6s' dataFormat += '6s' dataFormat += '7s' dataFormat += '4s' stNiceCardInfoReq = struct.Struct( dataFormat ) # 스트럭쳐 구조에 대한 정의를 Struct() 매개변수로 돌려준다 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 8888)) sock.listen(5) while 1: cli_sock, addr = sock.accept() recvData = cli_sock.recv(133) for str in data: print str rst = cli_sock.send(recvData[:133]) print "send(%d)"%rst sock.close() # 받은 데이터 133 사이즈 패킷을 dataFormat 형식으로 마샬링(분리)한다. data = stNiceCardInfoReq.unpack(recvData) |
댓글 없음:
댓글 쓰기