Socket 은 어플리케이션 프로세스와 트랜스포트 프로토콜 사이에 있는 문으로 묘사된다. 프로세스는 이 소켓을 통해서 정보를 전달하고 전달받는다.
전달 방식에 따라서 두가지 소켓 종류가 있다. UDP 와 TCP
# UDP Server
import socket
UDP_IP = '127.0.0.1' # Host address
UDP_PORT = 16002
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP 소켓생성
sock.bind((UDP_IP, UDP_PORT)) # bind socket 포트번호 할당
while True: # get client's address and send message
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print('Connected by', addr)
modifiedData = data.decode().upper()
print ('received message:', data)
sock.sendto(modifiedData.encode(), addr)
# UDP Client
import socket
UDP_IP = '127.0.0.1' # Host address
UDP_PORT = 16002
MESSAGE = 'Hello, World!'
print('UDP target IP:', UDP_IP)
print('UDP target port:', UDP_PORT)
print('message:', MESSAGE)
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP / for server
sock.sendto(MESSAGE.encode(), (UDP_IP, UDP_PORT)) # 서버이름과 포트를 부착해 전송
modifiedData = sock.recv(1024)
print(modifiedData)
sock.close()
# TCP Server
import socket
HOST = '127.0.0.1' # Host address
PORT = 16001 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, # 연락받을 소켓 생성
socket.SOCK_STREAM)
s.bind((HOST, PORT)) # TCP 요청을 받기를 시작함
s.listen(1)
print('Server Opened On Port ')
print(PORT) # 서버가 요청의 accept()를 기다리고,반환시 새로운 소켓 생성
conn, addr = s.accept()
print('Connected by', addr)
while 1:
data = conn.recv(1024) # read bytes
if not data:
break
conn.sendall(data)
conn.close() # connection close
# TCP Client
import socket
HOST = '127.0.0.1' # Host address
PORT = 16001 # The same port as used by the server
s = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(('Hello, world').encode())
data = s.recv(1024)
s.close()
print ('Received', data.decode())