이번에는 python에서 기본으로 제공하는 socket 모듈을 사용하는 방법을 다루겠습니다.
socket 통신에는 tcp와 udp 두가지가 있습니다.
1. 먼저 tcp – sender
# socket module import! import socket # socket create and connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("123.123.123.123", 9999)) # send msg test_msg = "안녕하세요 상대방님" sock.send(test_msg) # recv data data_size = 512 data = sock.recv(data_size) # connection close sock.close()
우선 tcp는 위에 모듈을 임포트 한 뒤에 소켓 통신을 할 ip(저는 임의로 123.123.123.123)와 포트를 지정 후에
연결을 합니다.
연결이 성사 되면 test_msg를 send합니다. 그리고 send가 끝나는 동시에 data를 data_size만큼 받아오게 됩니다.
이렇게 tcp를 사용할 수 있습니다. 상황에 맞게 for루프를 돌리거나 수정해서 사용하면 됩니다.
2. tcp – receiver
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) recv_address = ('0.0.0.0', 9999) sock.bind(recv_address) sock.listen(1) conn, addr = sock.accept() # recv and send loop while 1: data = conn.recv(BUFFER_SIZE) # 받고 data를 돌려줌. conn.send(data) conn.close()
받는 쪽 즉, 서버쪽의 tcp 소스 입니다.
3. 그리고 udp – sender
import socket # connection create send_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) dest = ("127.0.0.1", 9999) # send to dest send_sock.sendto(data, dest) send_sock.close()
위에 소스는 출발지 소켓 소스입니다.
4. udp – receiver
import socket # socket create sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # Bind the socket to the port recv_address = ('0.0.0.0', 9999) sock.bind(recv_address) data_size = 512 data, sender = sock.recvfrom(data_size) sock.close()
위 소스는 목적지 소켓 소스입니다.
끝~!