우 육시 엉이 - 자연 파이썬 학습 노트를 탄생 : Python3 네트워크 프로그래밍

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

네트워크 서비스의 낮은 수준의 표준 BSD 소켓 API를 제공하는 기본 소켓을 지원하기 위해, 기본 운영 체제 소켓 인터페이스의 모든 메소드에 액세스 할 수 있습니다.
서버 센터 클래스를 제공 네트워크 서비스 모듈 SocketServer의 높은 수준의, 당신은 네트워크 서버의 개발을 단순화 할 수 있습니다.
소켓은 무엇인가?
소켓 일컬어 " 소켓 " , 애플리케이션은 일반적으로 " 소켓 " 호스트 또는 컴퓨터 사이의 프로세스가 통신 할 수 있도록하는 것이, 네트워크 요청 또는 응답 요청 네트워크로 전송.
소켓 () 함수
다음과 같이 파이썬, 우리는 소켓을 작성하는 소켓 () 함수를 사용, 구문은 다음과 같습니다

socket.socket ([패밀리 [입력 [프로토]])
매개 변수
가족 : 소켓 제품군은 할 수 AF_UNIX 또는 AF_INET
입력 소켓의 형태는 연결 지향 또는 SOCK_STREAM 또는 SOCK_DGRAM으로 비 접속 될 수도
프로토콜 : 일반적으로 제로로 기본값을 기입하지 않습니다.
Socket 객체 (내장) 방법
기능 설명
서버 측 소켓
터플 어드레스 (호스트 포트)로 표현 AF_INET의 소켓 s.bind () 바인드 어드레스 (호스트 포트).
s.listen ()는 TCP를 듣기 시작합니다. 연결을 거부하기 전에 지정된 백 로그, 운영 체제는 최대 연결 수를 일시 중단 할 수 있습니다. 적어도 하나의 값은 애플리케이션의 대부분은 5로 설정된다.
s.accept () 수동적으로 받아 들일 TCP 클라이언트 연결 (차단)의 도착을 기다리고
클라이언트 소켓
s.connect () 이니셔티브는 TCP 서버 연결을 초기화합니다. 어드레스 튜플 (호스트 포트)의 일반적인 형식은, 연결 오류, 오류 리턴 socket.error 경우.
에러가 아닌 예외를 발생보다 발생하면 s.connect_ex ()는 연결 () 함수는 확장 된 버전이 오류 코드를 반환
공공 사용 소켓 기능
s.recv ()는 TCP 데이터를 수신하고, 문자열로 반환되는 데이터는 데이터의 특정 량의 최대 BUFSIZE 수신한다. 플래그는 메시지에 대한 추가 정보는 일반적으로 무시 될 수 있습니다.
s.send () TCP 데이터 전송, 송신 데이터 열은 소켓에 부착된다. 리턴 값이 숫자 문자열의 바이트 크기보다 작을 수있다, 바이트 수를 송신한다.
s.sendall ()는 TCP 데이터 무결성, 완전한 TCP의 송신 데이터를 전송합니다. 송신 데이터 문자열은 있지만, 모든 데이터를 전송하는 시도를 반환하기 전에 소켓에 ​​연결되어 있습니다. 성공적인 복귀 없음은, 실패 예외가 발생하지 않습니다.
s.recvfrom ()는 RECV (유사 UDP 데이터)이지만 리턴 값 (데이터 어드레스)를 수신. 수신 된 데이터는 데이터를 포함하는 문자열이며, 주소 데이터가 전송 소켓의 주소입니다.
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 () 소켓의 파일 기술자를 돌려줍니다.
(플래그) 플래그가 0이면 소켓이 다른 소켓 모드 (기본값) 차단에, 비 블록 모드로 설정을 s.setblocking. 당신이 RECV을 () 데이터를 찾을 수 없습니다, 또는 전송 () 호출 데이터를 즉시, 그것은 비정상적인 socket.error의 원인이됩니다 보낼 수 없습니다 호출하는 경우, 모드를 비는 차단.
s.makefile () 소켓과도 관련된 파일을 만듭니다
간단한 예
서버
우리는 소켓 객체를 생성하기 위해 소켓 모듈 소켓 기능을 사용합니다. 소켓 객체는 소켓 서비스 호출 다른 기능을 통해 설정할 수 있습니다.

이제 우리는 (호스트 이름, 포트) 기능 포트 (포트) 바인드를 호출하여 서비스를 지정할 수 있습니다.

그런 다음, 우리는 소켓 객체의 accept 메소드를 호출합니다. 이 방법은 클라이언트 연결을 위해 대기하고 연결을 나타내는 연결 개체가 클라이언트이다 반환합니다.

다음과 같이 전체 코드는 다음과 같습니다
# 가져 오기 소켓, SYS는 모듈 
가져 오기 소켓
 가져 오기 SYS를

# 소켓 객체 생성 
ServerSocket의 = (socket.socket를
            socket.AF_INET, socket.SOCK_STREAM) 

# 로컬 호스트 이름 가져 오기 
호스트 = ) (socket.gethostname를

포트 = 9999

# 바인딩 포트 번호 
serversocket.bind ((호스트, 포트))

# 최대 연결의 수를 설정 큐 초과 
serversocket.listen. (5 )

그동안 참 :
     #의 클라이언트가 연결 
    ClientSocket, ADDR = ServerSocket.accept ()      

    인쇄 ( " 연결 주소 : %의 S " %의 STR (요지))
    
    MSG = ' 신인 튜토리얼에 오신 것을 환영합니다! ' + ' \ R & LT \ N- " 
    clientsocket.send (msg.encode ( " UTF-. 8 ' ))
    clientsocket.close ()
클라이언트
우리는 간단한 클라이언트를 쓰기 다음으로 위에서 만든 서비스 인스턴스에 연결합니다. 포트 번호는 9999 .

를 Socket.connect은 (hosname는 포트) 방법은 포트 서비스 제공 업체에 호스트 포트의 호스트로 TCP 연결을 엽니 다. 우리는 서버에서 데이터를 얻을 수 있습니다 연결 한 후 연결을 종료하는 작업이 필요 완료 후, 기억.

다음과 같이 전체 코드는 다음과 같습니다

# !를 / usr / 빈 / python3의 
#의 파일 이름 : client.py

# 가져 오기 소켓, SYS는 모듈 
가져 오기 소켓
 가져 오기 SYS를

# 创建对象소켓 
의 =의 socket.socket (socket.AF_INET, socket.SOCK_STREAM)

# 로컬 호스트 이름 가져 오기 
호스트 = ) (socket.gethostname를

# 포트 번호를 설정
= 9999 포트

# 연결 서비스, 호스트와 포트를 지정 
s.connect을 ((호스트, 포트))

# 데이터가 수신 미만 1,024 바이트 
MSG s.recv = (1,024 )

s.close ()

인쇄 (msg.decode ( ' UTF-8 ' ))
이제, 제 1 단말을 수행 server.py 파일을 두 단자를 열 :

$ python3 server.py
제 2 단말이 수행 파일 client.py :

$ python3 client.py 
신인 튜토리얼에 오신 것을 환영합니다!
그리고 우리가 제 1 터미널을 열 것입니다, 당신은 다음과 같은 정보가 출력이 표시됩니다

연결 주소 : ( ' 192.168.0.118 ' , 33397)
파이썬 인터넷 모듈
여기 파이썬 네트워크 프로그래밍의 몇 가지 중요한 모듈은 다음과 같습니다 :

프로토콜 기능은 포트 번호 파이썬 모듈을 사용하여
HTTP 웹 액세스     (80)     HTTPLIB, URLLIB, XMLRPCLIB
일반적으로 알려진 NNTP 읽기 및 게시 뉴스 기사, " 포스트 "     119     nntplib
FTP 파일 전송     (20)     FTPLIB, URLLIB
SMTP 메일     25     smtplib
메일 POP3를 수신     (110)     poplib을
IMAP4 get 및 메일     (143)     은 imaplib
텔넷 명령     23     telnetlib을
고퍼 정보 찾기     (70) gopherlib을 URLLIB

 

추천

출처www.cnblogs.com/tszr/p/12008488.html