파이썬 Day31 : 소켓 커버 바이트, TCP 프로토콜과 일반 내장 함수 및 서버와 클라이언트 표준 태그

# # 소켓 

```파이썬 
소켓 소켓은 다음과 같습니다 
소켓 끝이 호스트의 IP 주소를 가진 호스트의 포트 번호 CP라고 끝 TCP 연결 등의 
통신 네트워크 엔드 포인트의 추상적 인 표현 중입니다 정보 네트워크 통신의 오가지을 포함하는 것이 필요 : 프로토콜 포트는 프로토콜에 연결, 로컬 호스트, 로컬 포트 프로토콜 처리, 원격 호스트의 IP 주소, 원격 프로세스의 IP 주소를 입력합니다. 
# 사용되는 전송 계층 프로토콜 (TCP 또는 UDP) 포트 번호를 사용하여 통신의 목적지 IP 주소 : 네트워크와 통신 접속되어, 세 가지 주요 변수가 존재한다. 소켓에 의도 "소켓." 소켓 바인딩 "소켓"로, 세 가지 파라미터를 조합함으로써, 애플리케이션 계층과 전송 계층은 소켓 인터페이스, 통신 과정이 될 수도 있고, 네트워크 연결 상이한 애플리케이션을 구별하기 위해, 데이터 전송은 동시 서비스가 
있다 패키지 모듈은 모듈을 사용하는 방법을 배우게하는 것입니다 
소켓이 두 가지 유형으로 나누어   
프로세스 간 통신 : AF_UNIX 
AF_INET : 네트워크 통신이  
분명 필요 : 네트워크 프로토콜의 개념과 소켓, 모든 프로그래밍 언어에 대해 동일 유일한 차이는 서로 다른 프로그래밍 언어의 이름의 함수가 
명확하기 :이 클라이언트 서버 소켓 객체 사용인지 여부 
 
`` 

# # 소켓에 일반적으로 사용되는 기능 

```파이썬 
서버 소켓 기능 
s.bind가 () 바인드 소켓에 (호스트, 포트 번호) 
s.listen ()는 TCP를 듣기 시작합니다
연결의 도착을 기다리고 s.accept () (차단) 클라이언트 TCP 연결의 수동적 인 수용 
를위한 잠금 소켓 방식 
모드 소켓 비 차단 구비 s.setblocking 차단 () 
들. 에서는 setTimeout ()는 소켓 작업을 차단 시간 제한을 설정

클라이언트 소켓 함수 
s.connect () 이니셔티브는 TCP 서버 연결을 초기화하기 
() 함수는 확장 된 버전입니다 연결) (s.connect_ex를 오류가 오히려 예외 던지는 것보다, 발생하면 오류 코드를 반환 

공공 사용 소켓 기능을 
s.recv ()는 TCP 데이터 수신 
s.send () TCP 데이터 전송 (데이터가 손실되고, 완료하지 않은 양의 나머지 공간 헥실 단말 버퍼보다 큰 경우에 송신되는 데이터를 전송) 
본질적 (s.sendall () 전체 TCP 데이터를 전송하기를 사이클) 완성까지 사이클 호 발송 모두 발송 데이터는 데이터가 손실되지 않으며, 나머지 공간 헥실 쪽 캐시보다 큰 송신되는, 송신 호출 
수신) s.recvfrom을 (UDP 데이터 
s.sendto () UDP 전송 
(s.getpeername을 ) 원격 소켓의 현재 주소로 접속된다 
s.getsockname () 소켓 주소 전류 
) s.getsockopt (소켓의 파라미터 반환 
s.setsockopt ()를 지정한 소켓 파라미터를 설정 
s.close (가) 소켓 종료

s.gettimeout ()는 소켓 작업을 차단 타임 아웃을 얻을 수 

```

 <p 형 스타일 = " 색상 : 빨강 " > TCP 서버를 시작하고 서버가 오류로 직접 링크 할 수 없기 때문에 클라이언트 또는 클라이언트를 시작해야합니다! </ ρ-> #의 #의 TCP 서버 
```파이썬 가져 오기 소켓 
ip_port = ( ' 127.0.0.1은 ' , 8081) #의 전화 카드 
BUFSIZE = 1024 
S = socket.socket (socket.AF_INET, socket.SOCK_STREAM) #이 휴대 전화 구입 
들. 바인드 (ip_port) #의 전화 카드 
s.listen (5)      #의 전화 대기 그동안를 참 :                          # 사이클을받는 새로운 링크, 당신은 전화에 응답을 중지 할 수 없습니다 
    CONN를 s.accept 요지 = ()             #





휴대 전화 
    #의 인쇄 (코네티컷) 
    #의 인쇄 (요지) 
    인쇄 ( ' 로부터 전화를 받았다 %의 ' % ADDR [0])
     그동안 참 :                          # 새 통신주기, 통신, 메시징 계속 
        MSG = CONN합니다. RECV (BUFSIZE)는              #는 메시지, 순종을 듣 
        인쇄 (MSG, 유형 (MSG)의) 
        conn.send (msg.upper ())           #의 메시지, 말을 
    () conn.Close을                     #이 정지 
S.CLOSE을 ()                        #의 전화를 


` `` 

# #의 TCP 클라이언트 

```파이썬 
가져 오기 소켓 
ip_port = (' 127.0.0.1 ' , 8081 ) 
BUFSIZE = 1024 
S = 인쇄socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
(ip_port에 대한) s.connect_ex는            #은 다이얼 

그동안 : 진정한                              # 클라이언트가 수신 된 메시지를 보낼 계속 새로운 통신주기를 
    (MSG = INPUT ' >> : ' ) .strip을 ( )
     IF (: MSG) == 0 렌 계속 
    s.send (msg.encode ( ' . UTF-8 ' ))          #의 메시지를 말할 (에만 보낼 바이트 타입) 
    
    피드백 = s.recv합니다 (BUFSIZE)                            # 수신 된 메시지 순종
     (feedback.decode ( ' UTF-. 8 ' )) 
S.CLOSE ()                                        # 정지 

` 

클라이언트와 서버 호출을 성공적으로 링크 한 경우 가까운 수행하지 않은 경우지만, 직접 강제로 프로그램을 종료 (또는 예외가 발생 보내 다른 문제를 야기) 종료됩니다 강제 

수신 된 데이터로 이어질 것입니다 파티를하지 않는, 리눅스에서, RECV 방법은 무한 루프의 결과로, 빈 메시지가 계속 

것으로, 작업 할 다른 플랫폼에 애플리케이션을 가능하게 이 두 가지 문제가 해결 된해야 

다음과 같습니다 솔루션 : 

```파이썬 
가져 오기 소켓 
ip_port에 대한 = ( ' 127.0.0.1 ' , 8081 ) 
BUFSIZE = 1024 
S = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
ip_port에 대한 s.bind ( ) 
s.listen ( 5 )    
 그동안 참 :                        
    CONN, ADDR = s.accept ()           
     그동안 참 :                         
         은 try : 
            MSG = conn.recv (BUFSIZE)             
             # 리눅스, 예외를 throw하지 않습니다 여기 판단 될 빈 메시지를받을 
            경우  되지 MSG : 
                conn.Close () 
                BREAK의 
            인쇄 (MSG, 유형 (MSG)) 
            conn.send (msg.upper ())         
       제외 ConnectionResetError :
             # 그것이 서버가 해당 링크의 종료, 예외가 발생하고, 다른 하나는 폐쇄 수단으로서 
            conn.Close ()
             BREAK 
    conn.Close를 ( )               
S.CLOSE ()                        

``
 
원경 TCP 통신 템플릿 프로그램이 완료되면 당신은 지속적으로 메시지를 전송 및 수신, 새 링크를 계속받을 수 있으며, 클라이언트 때문에 비정상 종료의 닫습니다 강요하지 않습니다!

 

추천

출처www.cnblogs.com/huhongpeng/p/10960223.html