SlideShare a Scribd company logo
1 of 32
Download to read offline
Python : Socket Program
Produced by Tae Young Lee
클라이언트/서버 아키텍처
서버가 하나 이상의 클라이언트(사용자)에게 '서비스'를 제공
listen
Socket
• 소켓은 '통신 종단점'이라는 개념을 구체화한 컴퓨터 네트
워크 데이터 구조
• 네트워크를 사용하는 애플리케이션은 통신을 시작하기 전
에 항상 소켓을 만들어야 함
• 소켓 없이는 통신을 시작할 수 없음
• 원래 소켓은 실행중인 프로그램(프로세스)이 같은 호스트
안에 실행 중인 다른 프로그램과 통신하기 위해 개발됨
Socket 유형
• 유닉스 소켓
– AF_UNIX 라는 '패밀리 이름' 을 가진다. AF는 주소 패밀리(Address
family)를 의미.
– 쉽게 클라이언트와 서버가 유닉스 환경의 동일한 컴퓨터에 존재해야
한다는 뜻.
– 이 소켓은 파일 기반이다.
소켓의 기반 구조가 파일 시스템을 통해 지원됨
– 파일 시스템은 같은 호스트에서 실행 중인 프로세스 사이에 지속적으
로 공유되므로, 합리적인 방법이라고 할 수 있다.
• 네트워크 기반
– 패밀리 이름은 AF_INET 이다.
– 클라이언트와 서버가 인터넷 어디서든 존재할 수 있다는 의미를 갖는
다
• 파이썬은 AF_UNIX, AF_NETLINK, AF_TIPC, AF_INET{,6} 패
밀리를 지원
연결 방식에 따른 분류
• 연결 지향 소켓(connection oriented)
– 통신을 하기 전에 반드시 연결 돼 있어야 한다(전화를 거는 것과
유사)
– 레코드 경계 없이 데이터를 순서대로 신뢰성 있게 중복없이 전
달. 각 메세지는 여러 조각으로 나뉘어서 반대편에 확실히 전달
된 다음에 다시 순서대로 한데 묶인 후 기다리는 애플리케이션
에 전달
– 연결 지향 소켓을 구현한 프로토콜(protocol)로는 전송 제어 프
로토콜(TCP, Trasmission Control Protocol) 이 있으며, 이 소켓을
만드려면 소켓 유형으로 SOCK_STREAM(스트림 소켓)을 지정
– 이 소켓은 네트워크상에서 IP를 호스트를 찾기 위해 사용하기 때
문에 두 프로토콜의 이름을 붙여 TCP/IP 라고 함.
• 비연결형 소켓(connectionless)
– 스트림 소켓과 대비되는 데이터그램(Datagram) 유형의 비연결
– 통신 시 최초 연결하는 과정이 필요 없음
– 데이터 전달 과정에서 순서나 신뢰성 이나 중복 방지를 보장할
수 없음. 이는 메세지가 연결 지향 소켓처럼 조각으로 나뉘지 않
고 통째로 송신된다는 것을 의미(우편 서비스에 비유)
– 연결 지향 소켓은 가상 회선을 맨 처음 만들고 유지하기 위해 상
당한 부가 비용이 발생
비연결 지향 소켓은 이런 부담이 덜하고 성능면에서 더 좋다.
– 데이터그램 소켓을 구현한 프로토콜로는 (UDP, User Datagram
Protocol)이 있고, UPD 소켓을 만들려면 SOCK_DGRAM을 소켓
유형으로 지정.
– 이 소켓도 IP를 네트워크상에서 호스트를 찾기 위해 사용
UPD/IP라고도 부름
Socket의 동작 과정
conn.close()
from socket import *
svrsock = socket(AF_INET, SOCK_STREAM)
conn.close()
from socket import *
svrsock = socket(AF_INET, SOCK_STREAM)
svrsock.bind(('127.0.0.1', 7799))
conn.close()
from socket import *
svrsock = socket(AF_INET, SOCK_STREAM)
svrsock.bind(('127.0.0.1', 7799))
svrsock.listen(1)
conn.close()
from socket import *
svrsock = socket(AF_INET, SOCK_STREAM)
svrsock.bind(('127.0.0.1', 7799))
svrsock.listen(1)
conn, addr = svrsock.accept()
addr
('127.0.0.1', 50933)
conn.close()
from socket import *
svrsock = socket(AF_INET, SOCK_STREAM)
svrsock.bind(('127.0.0.1', 7799))
svrsock.listen(1)
conn, addr = svrsock.accept()
addr
('127.0.0.1', 50933)
conn.recv(1024)
conn.close()
from socket import *
svrsock = socket(AF_INET, SOCK_STREAM)
svrsock.bind(('127.0.0.1', 7799))
svrsock.listen(1)
conn, addr = svrsock.accept()
addr
('127.0.0.1', 50933)
conn.recv(1024)
conn.close()
conn.close()
from socket import *
clientsock = socket(AF_INET, SOCK_STREAM)
conn.close()
from socket import *
clientsock = socket(AF_INET, SOCK_STREAM)
clientsock.connect(('127.0.0.1',7799))
conn.close()
from socket import *
clientsock = socket(AF_INET, SOCK_STREAM)
clientsock.connect(('127.0.0.1',7799))
clientsock.send('Hi, it is me.')
Blocking & Non-Blocking
• blocking 모드일 때 accept, recv, send 호출할 때 연결하려
고 하는 client 가 없을 때 무한정 기다리는 것
• non-blocking 모드일 때는 위와 같은 상황에서 일정한 시
간을 기다려도 응답이 없을 때 예외가 발생
• https://pl.python.org/docs/lib/socket-objects.html
• setblocking(flag)
Set blocking or non-blocking mode of the socket: if flag is 0, the socket is set to non-
blocking, else to blocking mode. Initially all sockets are in blocking mode. In non-
blocking mode, if a recv() call doesn't find any data, or if a send() call can't immediately
dispose of the data, a error exception is raised; in blocking mode, the calls block until
they can proceed. s.setblocking(0) is equivalent to s.settimeout(0); s.setblocking(1) is
equivalent to s.settimeout(None).
• settimeout(value)Set a timeout on blocking socket operations. The value argument can
be a nonnegative float expressing seconds, or None. If a float is given, subsequent
socket operations will raise an timeout exception if the timeout period value has
elapsed before the operation has completed. Setting a timeout of None disables
timeouts on socket operations. s.settimeout(0.0) is equivalent
tos.setblocking(0); s.settimeout(None) is equivalent to s.setblocking(1). New in version
2.3.
• gettimeout()Return the timeout in floating seconds associated with socket operations,
or None if no timeout is set. This reflects the last call
tosetblocking() or settimeout(). New in version 2.3.
위와 같이 기본적으로는 blocking 모드이다. non-blocking
mode를 이용하려면 setblocking(flag)을 이용해 non-
blocking mode 로 가거나 아니면 settimeout 을 이용해
non-blocking mode 로 전환하면 된다.
위와 같이 socket 객체를 생성하고 gettimeout을 하면 처음에 아무
것도 볼 수 없음
blocking mode (default) 이므로 값이 무한대임을 의미
그 다음에 setblocking() 을 이용해 non-blocking mode로 변환한 후
gettimeout을 호출하면 0.0 이 나옴
non-blocking mode의 default time out value는 0.0 임
위의 상황에서 생성된 socket 객체를 제거하고 다시
socket을 생성하면 default 이므로 blocking mode 임을
확인
(gettimeout) 여기서 setblocking 을 이용하지 않고 바로
settimeout 을 이용해도 원하는 timeout을 시간을 가진
non-blocking mode 로 변환되는 것을 확인
Example
• 다음은 blocking mode 의 간단한 예제이다.
Server 측 : localhost connection 이고 8000 port 를
binding 한 후 accept 함수를 호출해 client 와의
connection을 기다리고 있다.
• Client 측 : non-blocking mode 이고 timeout 이 3.5 초이
다. connect 을 통해 서버와 연결 된 후 non-blocking
mode로 변환되고, recv 를 통해 3.5 초간 서버로부터의 데
이터 전송을 기다리다가 예외를 발생시킨다.
Python socket programming
Python socket programming
Python socket programming

More Related Content

What's hot

Ryu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic MonitorRyu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic Monitorjieun kim
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kimjieun kim
 
도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편Sam Kim
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespaceSam Kim
 
[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개문학청년
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은jieun kim
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVAcooddy
 
Mininet
MininetMininet
Mininetymtech
 
TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수Yeon Soo Kim
 
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]지환 김
 
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Seung-Hoon Baek
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편Sam Kim
 
Openstack Instance Resize
Openstack Instance ResizeOpenstack Instance Resize
Openstack Instance Resizeymtech
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractFermat Jade
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 
네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)MoonLightMS
 
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2InfraEngineer
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치ymtech
 

What's hot (20)

Ryu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic MonitorRyu with OpenFlow 1.3, Traffic Monitor
Ryu with OpenFlow 1.3, Traffic Monitor
 
150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim150416 OpenStack Networking with Neutron Jieun, Kim
150416 OpenStack Networking with Neutron Jieun, Kim
 
도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편도커 없이 컨테이너 만들기 3편
도커 없이 컨테이너 만들기 3편
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace
 
[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개
 
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
20150525 open flow1.3_ryu_sdn_link aggregation 1_김지은
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
 
Mininet
MininetMininet
Mininet
 
TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수
 
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
 
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
Open vSwitch와 Mininet을 이용한 가상 네트워크 생성과 OpenDaylight를 사용한 네트워크 제어실험
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
Openstack Instance Resize
Openstack Instance ResizeOpenstack Instance Resize
Openstack Instance Resize
 
Nodejs_chapter3
Nodejs_chapter3Nodejs_chapter3
Nodejs_chapter3
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart Contract
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)
 
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
 
Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치Cubietruck 리눅스 이미지 설치
Cubietruck 리눅스 이미지 설치
 

Viewers also liked

OpenStack으로 바로보는 상용 클라우드 플랫폼
OpenStack으로 바로보는 상용 클라우드 플랫폼OpenStack으로 바로보는 상용 클라우드 플랫폼
OpenStack으로 바로보는 상용 클라우드 플랫폼Tae Young Lee
 
Sns(social network service)
Sns(social network service)Sns(social network service)
Sns(social network service)Tae Young Lee
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summitTae Young Lee
 
Internship Report and Logsheet - Taylor's University Lakeside Campus
Internship Report and Logsheet - Taylor's University Lakeside CampusInternship Report and Logsheet - Taylor's University Lakeside Campus
Internship Report and Logsheet - Taylor's University Lakeside CampusLovie Tey
 
금융업권의 빅데이터 활용과 개인정보 보호
금융업권의 빅데이터 활용과 개인정보 보호금융업권의 빅데이터 활용과 개인정보 보호
금융업권의 빅데이터 활용과 개인정보 보호메가트렌드랩 megatrendlab
 
Key technologies online 2017 final
Key technologies online 2017 finalKey technologies online 2017 final
Key technologies online 2017 finalRussell Stannard
 
Perspective of query
Perspective of queryPerspective of query
Perspective of queryTae Young Lee
 
Denoising auto encoders(d a)
Denoising auto encoders(d a)Denoising auto encoders(d a)
Denoising auto encoders(d a)Tae Young Lee
 
언어의 변천사를 통해 바라본 Python
언어의 변천사를 통해 바라본 Python언어의 변천사를 통해 바라본 Python
언어의 변천사를 통해 바라본 PythonTae Young Lee
 
Spm12를 이용한 fmri analysis
Spm12를 이용한 fmri analysisSpm12를 이용한 fmri analysis
Spm12를 이용한 fmri analysisTae Young Lee
 
The art of data science
The art of data scienceThe art of data science
The art of data scienceTae Young Lee
 
Neural network의 변천사 이태영
Neural network의 변천사 이태영Neural network의 변천사 이태영
Neural network의 변천사 이태영Tae Young Lee
 

Viewers also liked (20)

OpenStack으로 바로보는 상용 클라우드 플랫폼
OpenStack으로 바로보는 상용 클라우드 플랫폼OpenStack으로 바로보는 상용 클라우드 플랫폼
OpenStack으로 바로보는 상용 클라우드 플랫폼
 
Sns(social network service)
Sns(social network service)Sns(social network service)
Sns(social network service)
 
2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
 
당신이 믿는 세상과 빅데이터
당신이 믿는 세상과 빅데이터당신이 믿는 세상과 빅데이터
당신이 믿는 세상과 빅데이터
 
Internship Report and Logsheet - Taylor's University Lakeside Campus
Internship Report and Logsheet - Taylor's University Lakeside CampusInternship Report and Logsheet - Taylor's University Lakeside Campus
Internship Report and Logsheet - Taylor's University Lakeside Campus
 
금융업권의 빅데이터 활용과 개인정보 보호
금융업권의 빅데이터 활용과 개인정보 보호금융업권의 빅데이터 활용과 개인정보 보호
금융업권의 빅데이터 활용과 개인정보 보호
 
Key technologies online 2017 final
Key technologies online 2017 finalKey technologies online 2017 final
Key technologies online 2017 final
 
금융권의 빅데이터 활용과 이슈 점검
금융권의 빅데이터 활용과 이슈 점검금융권의 빅데이터 활용과 이슈 점검
금융권의 빅데이터 활용과 이슈 점검
 
보험사, 빅데이터에 답을 묻다
보험사, 빅데이터에 답을 묻다보험사, 빅데이터에 답을 묻다
보험사, 빅데이터에 답을 묻다
 
국내외 보건의료 빅데이터 현황 및 과제
국내외 보건의료 빅데이터 현황 및 과제국내외 보건의료 빅데이터 현황 및 과제
국내외 보건의료 빅데이터 현황 및 과제
 
기업의 공간빅데이터 활용사례
기업의 공간빅데이터 활용사례기업의 공간빅데이터 활용사례
기업의 공간빅데이터 활용사례
 
보건의료 빅데이터 활용 시범사업
보건의료 빅데이터 활용 시범사업보건의료 빅데이터 활용 시범사업
보건의료 빅데이터 활용 시범사업
 
국내외 공간빅데이터 정책 및 기술동향
국내외 공간빅데이터 정책 및 기술동향국내외 공간빅데이터 정책 및 기술동향
국내외 공간빅데이터 정책 및 기술동향
 
금융산업의 빅데이터 활용 및 이슈
금융산업의 빅데이터 활용 및 이슈금융산업의 빅데이터 활용 및 이슈
금융산업의 빅데이터 활용 및 이슈
 
Perspective of query
Perspective of queryPerspective of query
Perspective of query
 
Denoising auto encoders(d a)
Denoising auto encoders(d a)Denoising auto encoders(d a)
Denoising auto encoders(d a)
 
언어의 변천사를 통해 바라본 Python
언어의 변천사를 통해 바라본 Python언어의 변천사를 통해 바라본 Python
언어의 변천사를 통해 바라본 Python
 
Spm12를 이용한 fmri analysis
Spm12를 이용한 fmri analysisSpm12를 이용한 fmri analysis
Spm12를 이용한 fmri analysis
 
The art of data science
The art of data scienceThe art of data science
The art of data science
 
Neural network의 변천사 이태영
Neural network의 변천사 이태영Neural network의 변천사 이태영
Neural network의 변천사 이태영
 

Similar to Python socket programming

쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
Network programming report
Network programming reportNetwork programming report
Network programming reportJongwon
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬
시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬
시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬위키북스
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
이스티오 (Istio) 자습서 v0.5.0
이스티오 (Istio) 자습서 v0.5.0이스티오 (Istio) 자습서 v0.5.0
이스티오 (Istio) 자습서 v0.5.0Jo Hoon
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.SeungWoo Lee
 
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)제호 송
 
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...JooHyung Kim
 

Similar to Python socket programming (20)

Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Network programming report
Network programming reportNetwork programming report
Network programming report
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
Thread programming
Thread programmingThread programming
Thread programming
 
Init to systemd
Init to systemdInit to systemd
Init to systemd
 
시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬
시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬
시스템/네트워크 관리자가 바로 쓸 수 있는 파이썬
 
Internship backend
Internship backendInternship backend
Internship backend
 
이스티오 (Istio) 자습서 v0.5.0
이스티오 (Istio) 자습서 v0.5.0이스티오 (Istio) 자습서 v0.5.0
이스티오 (Istio) 자습서 v0.5.0
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
 
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
 

More from Tae Young Lee

LLMs Service that provides what users want to know
LLMs Service that provides what users want to knowLLMs Service that provides what users want to know
LLMs Service that provides what users want to knowTae Young Lee
 
Exploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsExploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsTae Young Lee
 
LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드Tae Young Lee
 
Recommendation System History
Recommendation System HistoryRecommendation System History
Recommendation System HistoryTae Young Lee
 
검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPTTae Young Lee
 
검색엔진에 적용된 딥러닝 모델 방법론
검색엔진에 적용된 딥러닝 모델 방법론검색엔진에 적용된 딥러닝 모델 방법론
검색엔진에 적용된 딥러닝 모델 방법론Tae Young Lee
 
The Deep Learning Compiler
The Deep Learning CompilerThe Deep Learning Compiler
The Deep Learning CompilerTae Young Lee
 
History of Vision AI
History of Vision AIHistory of Vision AI
History of Vision AITae Young Lee
 
Enhanced ai platform
Enhanced ai platformEnhanced ai platform
Enhanced ai platformTae Young Lee
 
Real estate trust solution
Real estate trust solutionReal estate trust solution
Real estate trust solutionTae Young Lee
 
Transfer learning usage
Transfer learning usageTransfer learning usage
Transfer learning usageTae Young Lee
 
Create a solution including deep learning models
Create a solution including deep learning modelsCreate a solution including deep learning models
Create a solution including deep learning modelsTae Young Lee
 
Infra as a model service
Infra as a model serviceInfra as a model service
Infra as a model serviceTae Young Lee
 
Deep learning financial product recommendation model
Deep learning financial product recommendation modelDeep learning financial product recommendation model
Deep learning financial product recommendation modelTae Young Lee
 
Deep Learning Through Various Processes
Deep Learning Through Various ProcessesDeep Learning Through Various Processes
Deep Learning Through Various ProcessesTae Young Lee
 

More from Tae Young Lee (20)

LLMs Service that provides what users want to know
LLMs Service that provides what users want to knowLLMs Service that provides what users want to know
LLMs Service that provides what users want to know
 
Exploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsExploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMs
 
LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드LLM 모델 기반 서비스 실전 가이드
LLM 모델 기반 서비스 실전 가이드
 
Recommendation System History
Recommendation System HistoryRecommendation System History
Recommendation System History
 
검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT
 
검색엔진에 적용된 딥러닝 모델 방법론
검색엔진에 적용된 딥러닝 모델 방법론검색엔진에 적용된 딥러닝 모델 방법론
검색엔진에 적용된 딥러닝 모델 방법론
 
PaLM Paper Review
PaLM Paper ReviewPaLM Paper Review
PaLM Paper Review
 
The Deep Learning Compiler
The Deep Learning CompilerThe Deep Learning Compiler
The Deep Learning Compiler
 
History of Vision AI
History of Vision AIHistory of Vision AI
History of Vision AI
 
Aws architecture
Aws architectureAws architecture
Aws architecture
 
Enhanced ai platform
Enhanced ai platformEnhanced ai platform
Enhanced ai platform
 
Nvidia architecture
Nvidia architectureNvidia architecture
Nvidia architecture
 
Ai based on gpu
Ai based on gpuAi based on gpu
Ai based on gpu
 
Real estate trust solution
Real estate trust solutionReal estate trust solution
Real estate trust solution
 
Transfer learning usage
Transfer learning usageTransfer learning usage
Transfer learning usage
 
Create a solution including deep learning models
Create a solution including deep learning modelsCreate a solution including deep learning models
Create a solution including deep learning models
 
Infra as a model service
Infra as a model serviceInfra as a model service
Infra as a model service
 
Bayesian learning
Bayesian learningBayesian learning
Bayesian learning
 
Deep learning financial product recommendation model
Deep learning financial product recommendation modelDeep learning financial product recommendation model
Deep learning financial product recommendation model
 
Deep Learning Through Various Processes
Deep Learning Through Various ProcessesDeep Learning Through Various Processes
Deep Learning Through Various Processes
 

Python socket programming

  • 1. Python : Socket Program Produced by Tae Young Lee
  • 2.
  • 3.
  • 4.
  • 5. 클라이언트/서버 아키텍처 서버가 하나 이상의 클라이언트(사용자)에게 '서비스'를 제공 listen
  • 6.
  • 7.
  • 8. Socket • 소켓은 '통신 종단점'이라는 개념을 구체화한 컴퓨터 네트 워크 데이터 구조 • 네트워크를 사용하는 애플리케이션은 통신을 시작하기 전 에 항상 소켓을 만들어야 함 • 소켓 없이는 통신을 시작할 수 없음 • 원래 소켓은 실행중인 프로그램(프로세스)이 같은 호스트 안에 실행 중인 다른 프로그램과 통신하기 위해 개발됨
  • 9. Socket 유형 • 유닉스 소켓 – AF_UNIX 라는 '패밀리 이름' 을 가진다. AF는 주소 패밀리(Address family)를 의미. – 쉽게 클라이언트와 서버가 유닉스 환경의 동일한 컴퓨터에 존재해야 한다는 뜻. – 이 소켓은 파일 기반이다. 소켓의 기반 구조가 파일 시스템을 통해 지원됨 – 파일 시스템은 같은 호스트에서 실행 중인 프로세스 사이에 지속적으 로 공유되므로, 합리적인 방법이라고 할 수 있다. • 네트워크 기반 – 패밀리 이름은 AF_INET 이다. – 클라이언트와 서버가 인터넷 어디서든 존재할 수 있다는 의미를 갖는 다 • 파이썬은 AF_UNIX, AF_NETLINK, AF_TIPC, AF_INET{,6} 패 밀리를 지원
  • 10. 연결 방식에 따른 분류 • 연결 지향 소켓(connection oriented) – 통신을 하기 전에 반드시 연결 돼 있어야 한다(전화를 거는 것과 유사) – 레코드 경계 없이 데이터를 순서대로 신뢰성 있게 중복없이 전 달. 각 메세지는 여러 조각으로 나뉘어서 반대편에 확실히 전달 된 다음에 다시 순서대로 한데 묶인 후 기다리는 애플리케이션 에 전달 – 연결 지향 소켓을 구현한 프로토콜(protocol)로는 전송 제어 프 로토콜(TCP, Trasmission Control Protocol) 이 있으며, 이 소켓을 만드려면 소켓 유형으로 SOCK_STREAM(스트림 소켓)을 지정 – 이 소켓은 네트워크상에서 IP를 호스트를 찾기 위해 사용하기 때 문에 두 프로토콜의 이름을 붙여 TCP/IP 라고 함.
  • 11. • 비연결형 소켓(connectionless) – 스트림 소켓과 대비되는 데이터그램(Datagram) 유형의 비연결 – 통신 시 최초 연결하는 과정이 필요 없음 – 데이터 전달 과정에서 순서나 신뢰성 이나 중복 방지를 보장할 수 없음. 이는 메세지가 연결 지향 소켓처럼 조각으로 나뉘지 않 고 통째로 송신된다는 것을 의미(우편 서비스에 비유) – 연결 지향 소켓은 가상 회선을 맨 처음 만들고 유지하기 위해 상 당한 부가 비용이 발생 비연결 지향 소켓은 이런 부담이 덜하고 성능면에서 더 좋다. – 데이터그램 소켓을 구현한 프로토콜로는 (UDP, User Datagram Protocol)이 있고, UPD 소켓을 만들려면 SOCK_DGRAM을 소켓 유형으로 지정. – 이 소켓도 IP를 네트워크상에서 호스트를 찾기 위해 사용 UPD/IP라고도 부름
  • 13.
  • 14. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM)
  • 15. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799))
  • 16. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1)
  • 17. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1) conn, addr = svrsock.accept() addr ('127.0.0.1', 50933)
  • 18. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1) conn, addr = svrsock.accept() addr ('127.0.0.1', 50933) conn.recv(1024)
  • 19. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1) conn, addr = svrsock.accept() addr ('127.0.0.1', 50933) conn.recv(1024) conn.close()
  • 20. conn.close() from socket import * clientsock = socket(AF_INET, SOCK_STREAM)
  • 21. conn.close() from socket import * clientsock = socket(AF_INET, SOCK_STREAM) clientsock.connect(('127.0.0.1',7799))
  • 22. conn.close() from socket import * clientsock = socket(AF_INET, SOCK_STREAM) clientsock.connect(('127.0.0.1',7799)) clientsock.send('Hi, it is me.')
  • 23.
  • 24. Blocking & Non-Blocking • blocking 모드일 때 accept, recv, send 호출할 때 연결하려 고 하는 client 가 없을 때 무한정 기다리는 것 • non-blocking 모드일 때는 위와 같은 상황에서 일정한 시 간을 기다려도 응답이 없을 때 예외가 발생
  • 25. • https://pl.python.org/docs/lib/socket-objects.html • setblocking(flag) Set blocking or non-blocking mode of the socket: if flag is 0, the socket is set to non- blocking, else to blocking mode. Initially all sockets are in blocking mode. In non- blocking mode, if a recv() call doesn't find any data, or if a send() call can't immediately dispose of the data, a error exception is raised; in blocking mode, the calls block until they can proceed. s.setblocking(0) is equivalent to s.settimeout(0); s.setblocking(1) is equivalent to s.settimeout(None). • settimeout(value)Set a timeout on blocking socket operations. The value argument can be a nonnegative float expressing seconds, or None. If a float is given, subsequent socket operations will raise an timeout exception if the timeout period value has elapsed before the operation has completed. Setting a timeout of None disables timeouts on socket operations. s.settimeout(0.0) is equivalent tos.setblocking(0); s.settimeout(None) is equivalent to s.setblocking(1). New in version 2.3. • gettimeout()Return the timeout in floating seconds associated with socket operations, or None if no timeout is set. This reflects the last call tosetblocking() or settimeout(). New in version 2.3. 위와 같이 기본적으로는 blocking 모드이다. non-blocking mode를 이용하려면 setblocking(flag)을 이용해 non- blocking mode 로 가거나 아니면 settimeout 을 이용해 non-blocking mode 로 전환하면 된다.
  • 26. 위와 같이 socket 객체를 생성하고 gettimeout을 하면 처음에 아무 것도 볼 수 없음 blocking mode (default) 이므로 값이 무한대임을 의미 그 다음에 setblocking() 을 이용해 non-blocking mode로 변환한 후 gettimeout을 호출하면 0.0 이 나옴 non-blocking mode의 default time out value는 0.0 임
  • 27. 위의 상황에서 생성된 socket 객체를 제거하고 다시 socket을 생성하면 default 이므로 blocking mode 임을 확인 (gettimeout) 여기서 setblocking 을 이용하지 않고 바로 settimeout 을 이용해도 원하는 timeout을 시간을 가진 non-blocking mode 로 변환되는 것을 확인
  • 28. Example • 다음은 blocking mode 의 간단한 예제이다. Server 측 : localhost connection 이고 8000 port 를 binding 한 후 accept 함수를 호출해 client 와의 connection을 기다리고 있다.
  • 29. • Client 측 : non-blocking mode 이고 timeout 이 3.5 초이 다. connect 을 통해 서버와 연결 된 후 non-blocking mode로 변환되고, recv 를 통해 3.5 초간 서버로부터의 데 이터 전송을 기다리다가 예외를 발생시킨다.