본문 바로가기
네트워크

기본 udp 연결 1

by tryotto 2019. 12. 26.

Server

1
2
3
4
5
6
7
8
9
10
11
12
13
import socket
 
server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_sock.bind(('127.0.0.1'8080)) # UDP 통신 방식일때도, bind 과정은 필요하다.
 
while 1 :
    data, addr = server_sock.recvfrom(1024
    # TCP 방식이랑 다른 함수인 recvfrom 을 쓴다 + while 문 없이도, 무제한 통신이 가능하다
 
    print('msg : ' + data.decode('utf-8'))
    print('addr client IP: ' + addr[0])
    print('addr client port: ' + str(addr[1]) + '\n')
 
cs

>> 따로 accept 하는 과정이 필요 없다




Client1

1
2
3
4
import socket
 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.sendto("Hello! ".encode('utf-8'),('127.0.0.1',8080))
cs
>> 따로 Connect 하는 과정이 필요없다. 그저, Sever 의 IP 주소와 포트번호만 전달해주면 된다.



Client2


1
2
3
4
import socket
 
client_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket2.sendto('My name is Jonathan Kim!'.encode('utf-8'), ('127.0.0.1'8080))
cs




# TCP 방식과 UDP 방식의 차이점


1) 필요한 문법이 UDP 가 더 적다

- TCP : (서버) bind, listen, accept,  (클라이언트) connect

- UDP : (서버) bind


2) 소켓의 갯수가 UDP 가 더 적다

- TCP : (서버) server_sock, connect_sock,  (클라이언트) client_sock

- UDP : (서버) server_sock,                (클라이언트) client_sock

> TCP 의 경우, 처음에 listen, connect, accept 과정을 통해 연결지으려는 과정이 필요하다
-> 이 "연결짓는 과정" 만을 위해 존재하는게 connect_sock 이다
-> 또한, connect_sock 를 따로 만들어서 해당 소켓만을 이용해서 통신이 가능하다

> 반면, UDP 의 경우엔 연결짓는 과정이 아예 필요 없기 때문에 server_sock 하나로 충분하다