Python-네트워크 프로그래밍
Python은 네트워크 서비스에 대한 두 가지 수준의 액세스를 제공합니다. 낮은 수준에서 기본 운영 체제의 기본 소켓 지원에 액세스 할 수 있으므로 연결 지향 및 비 연결 프로토콜 모두에 대해 클라이언트와 서버를 구현할 수 있습니다.
Python에는 FTP, HTTP 등과 같은 특정 애플리케이션 수준 네트워크 프로토콜에 대한 상위 수준 액세스를 제공하는 라이브러리도 있습니다.
이 장은 네트워킹-소켓 프로그래밍에서 가장 유명한 개념에 대한 이해를 제공합니다.
소켓이란?
소켓은 양방향 통신 채널의 끝점입니다. 소켓은 프로세스 내에서, 동일한 시스템의 프로세스간에 또는 다른 대륙의 프로세스간에 통신 할 수 있습니다.
소켓은 Unix 도메인 소켓, TCP, UDP 등 다양한 채널 유형을 통해 구현 될 수 있습니다. 소켓 라이브러리는 일반적인 전송뿐만 아니라 나머지를 처리하기위한 일반적인 인터페이스를 처리하기위한 특정 클래스를 제공합니다.
소켓에는 자체 어휘가 있습니다.
Sr. 아니. | 용어 및 설명 |
---|---|
1 | Domain 전송 메커니즘으로 사용되는 프로토콜 제품군입니다. 이러한 값은 AF_INET, PF_INET, PF_UNIX, PF_X25 등과 같은 상수입니다. |
2 | type 두 끝점 간의 통신 유형으로, 일반적으로 연결 지향 프로토콜의 경우 SOCK_STREAM, 비 연결 프로토콜의 경우 SOCK_DGRAM입니다. |
삼 | protocol 일반적으로 0이며 도메인 및 유형 내에서 프로토콜의 변형을 식별하는 데 사용할 수 있습니다. |
4 | hostname 네트워크 인터페이스의 식별자-
|
5 | port 각 서버는 하나 이상의 포트에서 호출하는 클라이언트를 수신합니다. 포트는 Fixnum 포트 번호, 포트 번호가 포함 된 문자열 또는 서비스 이름 일 수 있습니다. |
소켓 모듈
소켓을 생성하려면 소켓 모듈 에서 사용할 수 있는 socket.socket () 함수를 사용해야합니다.
s = socket.socket (socket_family, socket_type, protocol=0)
다음은 매개 변수에 대한 설명입니다.
socket_family − 이것은 앞에서 설명한 것처럼 AF_UNIX 또는 AF_INET입니다.
socket_type − SOCK_STREAM 또는 SOCK_DGRAM입니다.
protocol − 일반적으로 생략되며 기본값은 0입니다.
당신은 일단 소켓 객체를, 당신은 당신의 클라이언트 또는 서버 프로그램을 작성하는 기능을해야 사용할 수 있습니다. 다음은 필요한 기능 목록입니다-
서버 소켓 방법
Sr. 아니. | 방법 및 설명 |
---|---|
1 | s.bind() 이 메서드는 주소 (호스트 이름, 포트 번호 쌍)를 소켓에 바인딩합니다. |
2 | s.listen() 이 방법은 TCP 리스너를 설정하고 시작합니다. |
삼 | s.accept() 이것은 수동적으로 TCP 클라이언트 연결을 수락하고 연결이 도착할 때까지 대기합니다 (차단). |
클라이언트 소켓 방법
Sr. 아니. | 방법 및 설명 |
---|---|
1 | s.connect() 이 방법은 TCP 서버 연결을 적극적으로 시작합니다. |
일반 소켓 방법
Sr. 아니. | 방법 및 설명 |
---|---|
1 | s.recv() 이 방법은 TCP 메시지를받습니다. |
2 | s.send() 이 방법은 TCP 메시지를 전송합니다. |
삼 | s.recvfrom() 이 방법은 UDP 메시지를 수신합니다. |
4 | s.sendto() 이 방법은 UDP 메시지를 전송합니다. |
5 | s.close() 이 메서드는 소켓을 닫습니다. |
6 | socket.gethostname() 호스트 이름을 반환합니다. |
간단한 서버
인터넷 서버를 작성하기 위해 우리는 socket소켓 객체를 생성하기 위해 소켓 모듈에서 사용할 수있는 함수. 그런 다음 소켓 개체를 사용하여 다른 함수를 호출하여 소켓 서버를 설정합니다.
이제 전화 bind(hostname, port)주어진 호스트에서 서비스에 대한 포트 를 지정하는 함수 .
다음으로 반환 된 객체 의 accept 메서드를 호출 합니다. 이 메서드는 클라이언트가 지정한 포트에 연결할 때까지 기다린 다음 해당 클라이언트에 대한 연결을 나타내는 연결 개체 를 반환합니다 .
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
간단한 클라이언트
주어진 포트 12345와 주어진 호스트에 대한 연결을 여는 매우 간단한 클라이언트 프로그램을 작성해 보겠습니다. 이것은 파이썬의 소켓 모듈 함수를 사용하여 소켓 클라이언트를 만드는 것은 매우 간단 합니다.
그만큼 socket.connect(hosname, port )포트의 호스트 이름 에 대한 TCP 연결을 엽니 다 . 소켓이 열리면 IO 객체처럼 읽을 수 있습니다. 완료되면 파일을 닫는 것처럼 닫아야합니다.
다음 코드는 주어진 호스트 및 포트에 연결하고 소켓에서 사용 가능한 데이터를 읽은 다음 종료하는 매우 간단한 클라이언트입니다.
#!/usr/bin/python # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close() # Close the socket when done
이제이 server.py를 백그라운드에서 실행 한 다음 client.py 위에서 실행하여 결과를 확인합니다.
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
이것은 다음 결과를 생성합니다-
Got connection from ('127.0.0.1', 48437)
Thank you for connecting
Python 인터넷 모듈
Python 네트워크 / 인터넷 프로그래밍의 몇 가지 중요한 모듈 목록입니다.
실험 계획안 | 공통 기능 | 포트 번호 | Python 모듈 |
---|---|---|---|
HTTP | 웹 페이지 | 80 | httplib, urllib, xmlrpclib |
NNTP | 유즈넷 뉴스 | 119 | nntplib |
FTP | 파일 전송 | 20 | ftplib, urllib |
SMTP | 이메일 보내기 | 25 | smtplib |
POP3 | 이메일을 가져 오는 중 | 110 | poplib |
IMAP4 | 이메일을 가져 오는 중 | 143 | imaplib |
Telnet | 명령 줄 | 23 | 텔넷 립 |
부지런한 사람 | 문서 전송 | 70 | gopherlib, urllib |
FTP, SMTP, POP 및 IMAP 프로토콜과 함께 작동하려면 위에 언급 된 모든 라이브러리를 확인하십시오.
추가 자료
이것은 소켓 프로그래밍의 빠른 시작이었습니다. 방대한 주제입니다. 자세한 내용은 다음 링크를 통해 확인하는 것이 좋습니다.
유닉스 소켓 프로그래밍 .
Python 소켓 라이브러리 및 모듈 .