파이썬은 간단한 네트워크 채팅 프로그램을 달성

A, 리눅스 소켓

1.Linux Socke 기본적으로 BSD 소켓 (버클리 소켓)

인터페이스 (API)를 버클리 소켓 어플리케이션 프로그래밍은 종종 컴퓨터 통신 네트워크에서 사용되는 C 언어의 라이브러리를 사용하는 프로세스 간 통신이다. BSD 소켓 응용 프로그램 프로그래밍 인터페이스는 추상 표준 네트워크 소켓입니다. 대부분의 다른 프로그래밍 언어는 유사한 프로그래밍 인터페이스를 사용합니다. 버클리 소켓은 첫 번째 소켓이기 때문에, 대부분의 프로그래머는 그들을 잘 알고있는 자신의 기본 네트워크 API로 버클리 소켓 시스템의 많은 그래서. 

다음과 같이 기본 헤더 파일은, 서로 다른 시스템은 특정 다를 수 있습니다.

<SYS / socket.h> BSD 소켓 핵심 기능 및 데이터 구조.

<Netinet / in.h> AF_INET 및 AF_INET6 주소 패밀리와 해당 프로토콜 군과 PF_INET PF_INET6. 널리 IP 주소와 TCP 및 UDP 포트 번호를 포함, 인터넷 프로그래밍에 사용됩니다.

<SYS / un.h> PF_UNIX / PF_LOCAL 주소 패밀리. 하지 네트워크에있는 컴퓨터에서 실행되는 프로그램 사이의 로컬 통신하십시오.

<아르파 / inet.h> 및 IP 어드레스와 관련된 일부 기능.

<Netdb.h>는 프로토콜 이름 및 호스트 이름은 함수 디지털 번호로 변환된다.

 

2.API 기능

이 제공된 버클리 소켓 라이브러리 함수입니다 :

(1) 소켓 () 소켓의 몇 가지 유형을 만들려면, 시스템은 일부 자원, 식별 정수 반환 할당합니다.

(2) 결합 ()는 일반적으로 서버 측에서 사용되어, 소켓 어드레스 구조에 접속되고, 예를 들어, 특정 로컬 포트 ​​번호와 IP 주소이다.

(3) 듣고는 () 청취 상태로 바운드 TCP 소켓의 결과로, 서버 측에 사용됩니다.

클라이언트 측, 예비 소켓에 할당 된 포트 번호 (4)를 연결 (). 예를 들어, TCP 소켓, 그것은 새로운 TCP 연결을 시도합니다.

(5) 수용 ()는 서버 측에서 사용된다. 그것은 클라이언트의 요청이 새로운 TCP 연결을 만들려고하고 소켓에 연결하고 서로 연결된 받아들입니다.

수신 된 데이터를 전송하는 (6)에 송신 () 및 RECV () 또는 write () 및 (읽기) 또는 sendto를 ()와에 recvfrom ().

(7) close ()를 가까이 연결, 시스템 자원을 해제합니다.

(8) gethostbyname까지도 ()와 gethostbyaddr을 ()이 해결의 호스트 이름과 주소로 사용됩니다.

연속 읽기, 쓰기 배가 오류 상태의 복수의 처리 (9)를 선택 (), 폴 ().

(11) getsockopt 함수는 () 옵션 값의 해당 소켓을 제공합니다.

(12) setsockopt를 () 소켓 옵션에 해당하는 값을 설정합니다.

  

두 파이썬 네트워크 통신

  양방향 통신을 통해 네트워크에 두 프로그램은 소켓의 연결 종료라는 데이터 교환을 실현합니다. 파이썬 파이썬 소켓 모듈은 운영 시스템 구현의 소켓 인터페이스를 제공합니다.

1.socket의 상관 함수 :

(1) 소켓 () : 지정된 바인딩 소켓에 대한 서비스 제공을 만들 수 있습니다.

  함수 프로토 타입은 다음과 같습니다 소켓 = socket.socket (familly 입력)

  매개 변수 :

  familly : 주소 가족 프로토콜을 지정 또는 AF_INET AF_UNIX 수 있습니다. AF_INET 가족은 인터넷 주소, 동일한 시스템에서 프로세스 간 통신을위한 AF_UNIX 제품군이 포함되어 있습니다.

  입력 : 지정을 소켓의 유형입니다.

(2) 결합 () 결합 () 함수는 결합 된 소켓 로컬 어드레스를 할 수있다.

  함수 프로토 타입은 다음과 같습니다 socket.bind (주소)

  주소 매개 변수는 이중 요소 튜플 형식 (호스트, 포트)입니다. 호스트 대신 호스트, 포트는 포트 번호를 나타냅니다.

(3) 듣고 () : 듣기 () 함수는 액세스 연결 상태로 소켓을들을 수 있습니다.

  함수 프로토 타입은 다음과 같습니다 듣기 (백 로그)

  백 로그 대기 매개 변수는 연결 큐의 최대 길이를 지정합니다.

(4)를 연결 () 함수의 연결 () 소켓 주소에 연결한다.

  함수 프로토 타입은 다음과 같습니다를 Socket.connect (주소)

  주소 매개 변수는 이중 요소 튜플 형식 (호스트, 포트)입니다. 호스트 대신 호스트, 포트는 포트 번호를 나타냅니다

(5) () 동의 : 서버 호출은 연결 요청을 수락 () 함수 모니터 액세스 연결, 전화 () 함수 대기를 받아 듣고.

  함수 프로토 타입은 다음과 같습니다 (연결, 주소) = socket.accept ()

  수락 () 메소드로, 소켓은 대기 상태가됩니다. 클라이언트가 연결을 요청하면, 동의 () 메소드는 서버에 연결하고 수익을 설정합니다. () 메서드가 반환하는 두 요소 (연결, 주소)가 포함 된 튜플을 받아들입니다. 첫 번째 요소 연결 서버는 통해 고객과 의사 소통해야하며, 새로운 소켓 객체이고 두 번째 요소 주소는 고객의 인터넷 주소입니다.

(6) RECV () 소켓이 연결되어, 호출 RECV () 함수에서 데이터를 수신 할 수있다.

  함수 프로토 타입은 다음과 같습니다 버피 = sock.recv (크기)

  파라미터 데이터를 수신하는 소켓 양말 목적은, 파라미터의 크기가 지정된 크기의 버퍼 데이터를 수신한다. 기능은 데이터 수신 RECV ()를 반환합니다.

(7) 송신 () : 연결된 소켓으로 데이터를 전송할 수 호 전송 () 함수.

  함수 프로토 타입은 다음과 같습니다 sock.recv (BUF)

  양말 매개 변수는 연결된 소켓에 데이터를 전송한다. 버피 파라미터는 소켓 접속의 데이터 전송이다.

(8) close ()를 닫기 () 함수는 소켓을 닫습니다 그들이 점유하는 모든 리소스를 해제하는 데 사용됩니다.

  함수 프로토 타입 : sock.closesocket ();

  S는 소켓 폐쇄 될 파라미터이다.

당신은 리눅스 시스템에서 소켓 모듈을 볼 수 있습니다 :

  대조적으로, 어떤 재 소켓 모듈 상술 바인드 () 듣지 (), 추천 () 함수와 동의.

  그들은 _socket 모듈에서 상속되기 때문입니다. _socket는 파이썬, C 소켓 작업 그러나 이것은 매우 낮은 수준의 작업임을 실현에 구현되지 않은 수단 링크 라이브러리입니다. 캡슐화 모듈은 C 인간 용으로 구현 후 socket.py PY는 코드 블록, 시스템 _socket의 상이한 위치에서 동일하지 않다. 

_socket 모듈보기 :

 

아, 우리는 프로그래밍에서 사용되는 기능을 참조 할 필요가있다.

 

2.TCP / 프로그래밍 :

  소켓은 일반적으로 서버 (서버), 클라이언트 (고객)가 필요합니다, 양쪽 끝에서 필요한 프로그램. 도표 :

 

TCP 서버 프로그래밍 :

서버 연결 단계 :

(1) 소켓 객체를 생성

(2) 방법은 바인딩을 사용하여 바인딩 IP 주소, 주소 및 포트 포트

(3) 사용은 위의 주소를 바인딩, 듣고 시작 듣기

(4) 수신 연결 오브젝트를 받아들이고 데이터를 전송하기위한 소켓 ADDR 취득 기다리고 시작한다. 방해를 받아 사용하는, 새로운 스레드 내부의 일반적인 장소를 발생주의

(5) 수신 데이터 RECV

코드 :

import socket

sk = socket.socket() # 默认是AF_INET、SOCK_STREAM
address = ('127.0.0.1', 9000) 
sk.bind(address) # 将主机号与端口绑定到套接字
sk.listen(3) # 设置并启动TCP监听器
print('waitting......')

while True:
    conn, addr = sk.accept() # 被动接受TCP连接,一直等待连接到达
    print('连接到达',addr)
    while True:
        data = conn.recv(1024) # 接收TCP消息,并制定最大长度
        if not data:
            print('连接已断开!')
            conn.close()
            break
        print(str(data, 'utf8'))
        inp = input('>>')
        conn.send(bytes(inp, 'utf8'))  #向客户端回送信息

TCP客户端编程:

客户端连接步骤:

(1)创建Socket对象

(2)连接到远端服务端的IP和port端口, connect方法

(3)传输数据:send发送数据;recv接收数据, 会阻塞

(4)关闭连接,释放资源

代码:

import  socket
sk
= socket.socket() # 默认是AF_INET、SOCK_STREAM address = ('127.0.0.1', 9000) sk.connect(address) #连接服务端 while True: inp = input('>>') if inp == 'exit': break sk.send(bytes(inp, 'utf8')) #向服务端发送信息 data = sk.recv(1024) print(str(data, 'utf8')) else: sk.close()

运行结果:

服务端:

 

客户端:

 

 

 

추천

출처www.cnblogs.com/yll333/p/11964582.html