Socket programming

Socket 은 어플리케이션 프로세스와 트랜스포트 프로토콜 사이에 있는 문으로 묘사된다. 프로세스는 이 소켓을 통해서 정보를 전달하고 전달받는다.

전달 방식에 따라서 두가지 소켓 종류가 있다. UDP 와 TCP

Socket programming with UDP

# 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()

Socket programming with TCP

# 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())