파이썬 네트워크 프로그래밍
파이썬은 액세스 네트워크 서비스의 두 가지 수준을 제공합니다. :
- 낮은 수준의 네트워크 서비스를위한 기본적인 소켓을 지원하기 위해, 그 표준 BSD 소켓 API를 제공하면 기본 운영 시스템 소켓 인터페이스의 모든 메소드에 액세스 할 수있다.
- 그것이 중앙 서버 클래스를 제공 SocketServer 네트워크 서비스 모듈의 하이 레벨은, 네트워크 서버의 개발을 단순화 할 수있다.
소켓은 무엇인가?
호스트 사이에 또는 컴퓨터의 프로세스가 통신 할 수 있도록 또한 "소켓"라고도 소켓은 애플리케이션이 일반적으로, 네트워크 요청 또는 응답 네트워크 요구에 "소켓"에 의해 발행된다.
소켓 () 함수
파이썬 우리 소켓을 생성하기 위해 소켓 () 함수를 사용하여 다음과 같은 구문은 :
socket.socket([family[, type[, proto]]])
매개 변수
- 가족 : 가족이 소켓을 만들 수 있습니다 또는 AF_INET AF_UNIX
- 유형 : 소켓 유형에 연결 지향 또는 비 연결 될 수 있습니다
SOCK_STREAM
또는SOCK_DGRAM
- 프로토콜 : 일반적으로 제로로 기본값을 기입하지.
Socket 객체 (내장) 방법
기능 | 기술 |
---|---|
서버 소켓 | |
s.bind () | 튜플 (호스트, 포트)의 형태로 AF_INET의 소켓에 바인드 주소 (호스트, 포트) 주소를 나타냅니다. |
s.listen () | TCP는 듣기 시작합니다. 접속을 거부하기 전에 지정된 잔고 운영 체제는 최대 연결 개수를 정지 할 수있다. 이 값은 적어도 하나, 대부분의 애플리케이션이 5로 설정 될 수있다. |
s.accept () | TCP 클라이언트 연결의 수동 수용 (차단)의 도착을 기다리고 |
클라이언트 소켓 | |
s.connect () | 액티브는 TCP 서버 연결을 초기화합니다. 튜플 (호스트 이름, 포트)의 형식의 일반 주소, 연결 오류 경우, 오류가 socket.error을 반환됩니다. |
s.connect_ex () | 때 오류 대신 예외를 throw () 함수의 확장 버전을 연결하면 오류 코드를 반환 |
소켓 기능을 공공의 목적 | |
s.recv () | 데이터를 문자열로 반환됩니다, TCP 데이터를 수신 BUFSIZE를 수신 할 데이터의 최대 크기를 지정합니다. 메시지 플래그에 대한 자세한 정보를 제공하는 것은 일반적으로 무시할 수 있습니다. |
s.send () | TCP 데이터를 전송 소켓 연결에 데이터 열을 송신한다. 리턴 값은 전송할 바이트의 수는이 수 바이트의 문자열보다 작을 수있다. |
s.sendall () | 전체 전송 TCP 데이터의 완전한 전송 TCP 데이터. 이것은 소켓 연결에 데이터 열을 송신하지만, 모든 데이터를 전송하도록 시도 할 것이다 반환하기 전에. 성공적인 복귀 없음은 실패 예외가 발생하지 않습니다. |
s.recvform () | UDP 데이터를 수신하면 () RECV 유사하지만 반환 값 (데이터 어드레스)이다. 데이터가 수신 된 데이터를 포함하는 문자열이고, 어드레스 데이터는 소켓 주소를 전송한다. |
s.sendto () | 소켓에 데이터를 보내는 UDP 데이터를 전송 어드레스 (ipaddr을 포트) 튜플 지정된 원격 주소의 형태이다. 리턴 값은 전송 된 바이트의 수이다. |
s.close () | 소켓을 닫습니다 |
s.getpeername () | 연결 소켓 원격 주소를 돌려줍니다. 리턴 값은 보통 튜플 (ipaddr을 포트)이다. |
s.getsockname () | 소켓 자신의 주소를 돌려줍니다. 일반적으로 튜플 (ipaddr을, 포트) |
s.setsockopt (레벨의 optname, 값) | 주어진 소켓 옵션의 값을 설정합니다. |
s.getsockopt (레벨의 optname [.buflen]) | 소켓 옵션의 리턴 값. |
s.settimeout (시간 초과) | 소켓 운전 제한 시간을 설정, 제한 시간 (초) 부동 소수점 수이다. 없음 값은 시간 제한 기간을 나타냅니다. 그들이 연결 조작 할 수 있기 때문에 일반적으로, 제한 시간은 단지 소켓 세트를 작성해야합니다 (예 : 연결 등을 ()) |
s.gettimeout () | 거기에, 정해진 제한 시간없는 없음을 반환하지 않는 경우, 초 현재 시간 초과 기간의 값을 돌려줍니다. |
s.fileno () | 소켓의 파일 기술자를 돌려줍니다. |
s.setblocking (플래그) | 플래그가 0 인 경우, 소켓은 소켓 달리 차단 모드 (디폴트 값)으로 비 블록 모드로 설정된다. 당신이 RECV를 호출하는 경우 () 데이터를 찾거나 즉시 데이터를 보낼 수 없습니다 () 호출을 보내지 않은, 비 블록 모드, 그것은 socket.error 예외가 발생합니다. |
s.makefile () | 소켓과 관련하여 관련 서류를 작성 |
간단한 예
서버
우리는 소켓 객체를 생성하기 위해 소켓 모듈소켓 함수를 사용합니다.소켓 객체는 소켓 서비스를 설정하기 위해 다른 함수를 호출 할 수 있습니다.
이제 우리는바인드 (호스트 이름, 포트) 기능포트 (포트)를호출하여 서비스를 지정할 수있습니다.
다음으로, 우리는 소켓 객체의 동의메서드를 호출합니다. 이 방법은 클라이언트 연결을 기다리는 클라이언트에 접속 나타내는연결오브젝트를 반환한다.
다음과 같이 전체 코드는 다음과 같습니다
#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:server.py import socket # 导入 socket 模块 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口 s.bind((host, port)) # 绑定端口 s.listen(5) # 等待客户端连接 while True: c, addr = s.accept() # 建立客户端连接。 print '连接地址:', addr c.send('欢迎访问本教程!') c.close() # 关闭连接
클라이언트
다음에 우리는 위에서 생성 한 서비스 인스턴스에 연결하는 간단한 클라이언트를 작성합니다. 포트 번호는 12345입니다.
를 Socket.connect은 (hosname는 포트) 방법은포트서비스 제공 업체에호스트 포트에대한 호스트로 TCP 연결을 엽니 다.일단 작업의 완료가 연결을 종료해야합니다 후 우리는, 서버에서 데이터를 게시 기억할 수있는 연결되어 있습니다.
다음과 같이 전체 코드는 다음과 같습니다
#!/usr/bin/python # -*- coding: UTF-8 -*- # 文件名:client.py import socket # 导入 socket 模块 s = socket.socket() # 创建 socket 对象 host = socket.gethostname() # 获取本地主机名 port = 12345 # 设置端口好 s.connect((host, port)) print s.recv(1024) s.close()
이제 우리는 심지어 터미널을 열 수 있고, 제 1 단자는 server.py 파일을 실행한다 :
$ python server.py
제 2 단자는 client.py 파일을 수행
$ python client.py 欢迎访问本教程!
이것은 우리의 첫 번째 후 터미널을 열고 다음과 같은 정보가 출력이 표시됩니다
连接地址: ('192.168.0.118', 62461)
파이썬 인터넷 모듈
다음은 몇 가지 중요한 모듈 파이썬 네트워크 프로그래밍 있습니다 :
협정 | 유용한 기능 | 포트 번호 | 파이썬 모듈 |
---|---|---|---|
HTTP | 웹 액세스 | (80) | HTTPLIB, URLLIB, XMLRPCLIB |
NNTP | 읽기 및 뉴스 기사를 올리기는 "게시물"로 알려진 | 119 | nntplib |
FTP | 파일 전송 | (20) | FTPLIB, URLLIB |
SMTP | 전자 메일 보내기 | (25) | smtplib |
POP3 | 메일 수신 | (110) | poplib |
IMAP4 | 메일 가져 오기 | (143) | 은 imaplib |
텔넷 | 명령 행 | (23) | telnetlib |
땅 다람쥐 | 정보 찾기 | (70) | gopherlib, URLLIB |
더 자세한 내용은 공식 웹 사이트에서 찾을 수 있습니다 파이썬 소켓 라이브러리와 모듈 .