이번에는 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()

위 소스는 목적지 소켓 소스입니다.

끝~!