2011년 3월 30일 수요일

[Python] Socket Programming

Python으로 Socket를 이용해 인터넷(TCP/IP) 통신 스크립트를 만들기 위한 기본 메모.

기본적으로 socket 모듈을 이용한다. 그 외 편하게 쓰기 위해 필요한 몇 가지 모듈을 import 한다.
from socket import socket, AF_INET, SOCK_STREAM

소켓으로 특정 서버에 접속할 때는 connect를 이용한다.
cs = socket(AF_INET, SOCK_STREAM)
cs.connect( ('IP ADDRESS OR HOSTNAME', PORT) )
connect 시 튜플로 넘기는 것에 유의하자.

소켓으로 데이터를 보낼 때(send)는 send를 이용한다.
cs.send('data')
당연히 텍스트 뿐만 아니라 바이너리 스트림(struct로 만든 것 등)도 가능하다. -_-;; 중간에 0x00이 끼면 어떻게 될까 고민했지만 Python의 리스트는 생각보다 견고하게 만들어져 있어서 다행이다.

읽어올 때는 recv를 이용하면 된다.

recvdata = cs.recv()
recv() 는 인자(parameter)로 읽을 바이트 수를 넣을 수도 있다. 만약 읽을 바이트 수를 지정한 상태에서 얻은 recvdata의 크기가 작다면 나머지 크기를 recv()에 인자로 넘겨주는 형태로 이어받기를 구현할 수도 있다는 의미다. (물론 recvdata의 크기 확인은 len(recvdata) 이다)

역시 동일하게 0x00이 버퍼에 들어있더라도 걱정할 필요는 없더라.

끝 낼 때는 close를 호출해 주는 것도 잊지 말자.
cs.close()
귀찮다면 굳이 호출 안해줘도 오동작 할 녀석은 아니다. 단지 close를 시켜주는 건 서버에 대한 예의다. -_-;;;

이 외에도 exception 처리 등을 해야 하고 timeout에 대한 것도 설정할 수 있고 다양한 기능을 설정하거나 할 수 있지만 위 코드들만 있으면 python 으로 소켓 프로그래밍 하기에는 무리가 없는 것 같다.

댓글 없음 :