Python Essential 세미나

Download Report

Transcript Python Essential 세미나

1
Python Essential 세미나
2001. 5. 8(화)
Python Essential 세미나
Socket Programming
발표자 : 임민상
Python Essential 세미나
● About Socket
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
• 소켓(Socket)은 1982년 BSD(Berkeley Software Distribution) UNIX 4.1에서 처음 소개
• TCP/IP 프로토콜의 프로그래머 인터페이스
예제 - 에코
• 존재하는 프로세스들 사이의 대화를 가능하게
하는 프로세스간 상호 통신방식이다
Socketserver
Module 예제
• 양방향(bidirectional)
참고할만한
Module
참고자료
• 한 컴퓨터 내의 (소켓을 사용하는) 모든 서버
프로세스는 별도의 포트번호를 갖는 소켓을
갖는다.
2
Python Essential 세미나
● 소켓의 유형 - TCP
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
TCP(Transport Connect Protocol)
가상회선(Virtual circuit) - 데이터들이 신뢰할 수
있는 방식으로 차례대로 전송되고 복사되지 않는
다.
예제 - 에코
연결기반 - Client/Server 방식의 통신
Socketserver
Module 예제
가상회선의 디폴트 프로토콜
참고할만한
Module
SOCK_STREAM : 스트림 방식의 소켓 생성
참고자료
양방향연결에 기초한 바이트 가변길이의 스트림
3
Python Essential 세미나
● 소켓의 유형 - UDP
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
UDP(User Datagram Protocol)
데이터그램(Datagram) - 데이터들이 순서없이
신뢰할 수 없는 방식으로 전송된다.
비연결기반 : 전보와 비슷
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
신뢰성보다 속도가 더 중요한 응용들에서 사용
데이터그램의 디폴트 프로토콜
SOCK_DGRAM : 데이터그램 방식의 소켓 생성
비신뢰적 고정길이의 메시지
4
Python Essential 세미나
● About Synchronously
About Socket
소켓의 유형
• Synchronously Class
예제 - 에코
동기적 : 각각의 클라이언트의 request에 대해서
다음 request가 시작되기 전에 종료가
되어야 한다
단점 : 각각의 request가 완료시까지 처리가
오래걸리는 모델에서는 부적합
Socketserver
Module 예제
• Asynchronous Class
About
Synchronously
소켓 프로그래밍
절차
참고할만한
Module
참고자료
각각의 클라이언트 request에 대해서 각각의
process를 발생시키거나, thread 처리하는 서버
다중 Client 를 처리
5
Python Essential 세미나
● Synchronously Class
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
• TCPServer
Internet TCP 프로토콜을 사용, 연속적,
믿을만한 쌍방향 바이트 스트림을 제공
• UDPServer
Datagrams를 사용, 접속을 보증하지 않으며
비신뢰성, 고정크기 메시지, 속도는 빠름
• UnixStreamServer
UNIX 이외의 플랫폼에서는 쓸수 없다.
• UnixDatagramServer
UNIX 이외의 플랫폼에서는 쓸수 없다.
6
Python Essential 세미나
● Asynchronous Class
About Socket
소켓의 유형
• ThreadingTCPServer
About
Synchronously
• TheadingUDPServer
소켓 프로그래밍
절차
• ThreadingUnixStreamServer
예제 - 에코
• ThreadingUnixDatagramServer
Socketserver
Module 예제
참고할만한
Module
참고자료
7
Python Essential 세미나
● 소켓 프로그래밍 절차 - 서버 측
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
1. svrsock = socket(AF_INET, SOCK_STREAM)
# 스트림 방식의 소켓 객체 생성
2. 소켓을 HOST 컴퓨터의 PORT에 연결
svrsock.bind(HOST, PORT)
3. 한번에 처리가능한 연결 수 설정. 5까지 가능
svrsock.listen(1)
4. 클라이언트로부터 소켓 연결이 올 때 까지 대기
conn, addr = svrsock.accept()
5. 클라이언트의 connect로부터 소켓이 연결되면
svrsock.recv(bufsize) 와 svrsock.send(string)을
반복하며 데이터 주고 받음
6. 다 마쳤으면 소켓 종료
svrsock.close()
8
Python Essential 세미나
● 소켓 프로그래밍 절차 - 클라이언트 측
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
1. 소켓 객체 생성
clientsock = socket(AF_INET, SOCK_STREAM)
# 스트림 방식의 소켓 객체 생성
2. 소켓을 서버 컴퓨터의 특정 포트에 연결
clientsock.connect(HOST, PORT)
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
3. 연결 됐으면 데이터 수신/전송
clientsock.recv(1024)
clientsock.send('Hi!')
4. 다 마쳤으면 소켓 종료
clientsock.close()
9
Python Essential 세미나
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
10
● 소켓 프로그래밍 절차
- 서버와 클라이언트 소켓
Python Essential 세미나
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
● 소켓 프로그래밍 절차
- 데이터그램 소켓
11
Python Essential 세미나
12
● 에코 - 서버 프로그램
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
from socket import *
HOST = ''
# localhost를 의미하는 심볼릭 이름
PORT = 50007 # 임의의 사용가능한 안쓰는 포트
s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
# 클라이언트에서 연결 요청이 올 때 까지 대기
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.send(data)
conn.close()
Python Essential 세미나
13
● 에코 - 클라이언트 프로그램
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
from socket import *
HOST = 'localhost’
# host name 현재는 한 컴퓨터 내에서 사용
PORT = 50007
# 서버와 같은 포트번호를 써야 함
s = socket(AF_INET, SOCK_STREAM)
s.connect(HOST, PORT)
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', `data`
14
Python Essential 세미나
● 에코 - 실행결과
About Socket
소켓의 유형
About
Synchronously
• 서버측 출력 예
Connected by ('127.0.0.1', 2984)
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
• 클라이언트측 출력 예
Received 'Hello, world'
Python Essential 세미나
● Socketserver Module 예제
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
1: from SocketServer import *
2: HOST = ('',8001)
3: ClientList = []
4: class MyServer(BaseRequestHandler):
5: def handle(self):
6:
conn = self.request
7:
if conn:
8:
peername = conn.getpeername()
9:
ClientList.append(peername)
10:
print "Requested by ",peername
11:
try:
12:
cmd = raw_input(">> ")
13:
while cmd:
15
Python Essential 세미나
16
● Socketserver Module 예제
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
14:
if cmd == 'ls':
15:
print "== Connected Client Lists =="
16:
print ClientList
17:
cmd = raw_input(">> ")
18:
except:
19:
print "Socket error occured"
20:
return
21: if __name__ == '__main__':
22: my_server =
ThreadingTCPServer(HOST,MyServer)
23: my_server.serve_forever()
Python Essential 세미나
● Socketserver Module 예제 - 보충설명
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
• def handle(self) : # handle() 메소드 재정의
request에 대해서 처리해주는 역할
• ThreadingTCPServer(HOST,MyServer)
Host 는 (IP, PORT) 로 이루어져 있음
MyServer 는 request handler
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
• IP 의 `` 의미 : Local Host
• my_server.serve_forever()
서버가 실제로 Client의 request를 accept 할 수
있도록 호출
- handle_request() 는 하나의 request를 accept
- serve_forever() 는 많은 request를 accept
17
Python Essential 세미나
● 참고할만한 Module
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
• FTP(File Transfer Protocol) 프로토콜
- ftplib 모듈이 FTP 클래스를 지원
- 자세한 정보는 인터넷 RFC 959를 참조
• Telnet
- telnetlib 모듈에 Telnet 프로토콜을 구현하는
Telnet 클래스를 지원
- 자세한 정보는 인터넷 RFC 854를 참조
18
Python Essential 세미나
● 참고자료
About Socket
소켓의 유형
About
Synchronously
소켓 프로그래밍
절차
예제 - 에코
Socketserver
Module 예제
참고할만한
Module
참고자료
• 소켓(Socket) 프로그래밍
- 이강성, 2000.3.23
• Python으로 네트워크서버 프로그램 만들기
- 서준원, 2000.7.28
• Socket API 보고서
- 임민상, 1999.5.3
19