Latest web development tutorials

파이썬 네트워크 프로그래밍

파이썬은 액세스 네트워크 서비스의 두 가지 수준을 제공합니다. :

  • 낮은 수준의 네트워크 서비스를위한 기본적인 소켓을 지원하기 위해, 그 표준 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

더 자세한 내용은 공식 웹 사이트에서 찾을 수 있습니다 파이썬 소켓 라이브러리와 모듈 .