>백엔드 개발 >파이썬 튜토리얼 >Python의 소켓 네트워크 프로그래밍에 대한 자세한 소개(예제 포함)

Python의 소켓 네트워크 프로그래밍에 대한 자세한 소개(예제 포함)

不言
不言앞으로
2018-10-13 16:34:493156검색

이 기사는 Python의 소켓 네트워크 프로그래밍에 대한 자세한 소개를 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

네트워크 통신의 세 가지 요소

  • IP

전자 메일을 보내려면 상대방의 이메일 주소를 알아야 하는 것처럼 통신할 때 양측 모두 상대방의 신원을 알아야 합니다. 인터넷상의 모든 컴퓨터의 고유 식별자는 123.123.123.123과 유사한 IP 주소입니다.

IP 주소는 실제로 32비트 정수입니다(IPv4라고 함). 192.168.0.1과 같이 문자열로 표시되는 IP 주소는 실제로는 편의상 32비트 정수를 8비트로 그룹화하여 표시되는 숫자입니다. 독서의.
IPv6 주소는 실제로 128비트 정수로, 현재 사용되는 IPv4의 업그레이드 버전이며 문자열로 표시됩니다. 2001:0db8:85a3:0042:1000:8a2e:0370:7334 와 유사합니다.
  • port port

두 대의 컴퓨터가 통신할 때, 같은 컴퓨터에서 여러 개의 네트워크 프로그램이 실행되고 있기 때문에 단순히 IP 주소를 보내는 것만으로는 충분하지 않습니다. IP 패킷이 도착하면 브라우저 또는 QQ로 전달되는지 여부를 구별하기 위해 포트 번호가 필요합니다.

각 네트워크 프로그램은 운영 체제의 고유한 포트 번호를 적용합니다. 이러한 방식으로 두 컴퓨터 간에 네트워크 연결을 설정하려면 두 프로세스에 고유한 IP 주소와 해당 포트 번호가 필요합니다.

  • TCP/UDP 프로토콜

전 세계의 모든 종류의 컴퓨터를 연결하려면 일련의 글로벌 프로토콜을 지정해야 합니다. 인터넷 프로토콜을 TCP/IP 프로토콜

소켓이라고 합니다. 프로그래밍

소켓은 네트워크 프로그래밍의 추상적 개념입니다. 일반적으로 우리는 "네트워크 링크 열기"를 의미하기 위해 소켓을 사용하며, 소켓을 열려면 대상 컴퓨터의 IP 주소와 포트 번호를 알고 프로토콜 유형을 지정해야 합니다.

import socket
# socket.gethostname()当不传入参数时,返回本机主机名
print(socket.gethostname()) #DESKTOP-EN0LQJH

#域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称
#通过域名查找服务器IP地址
print(socket.gethostbyname('www.baidu.com'))    #119.75.216.20

#通过一个IPv4的地址来获取主机信息
print(socket.gethostbyaddr('114.114.114.114'))

#通过IP/port组合,访问服务器信息
# 如果是AF_INET则格式为:(address, port),如果为AF_INET6,则返回(address, port, flow info, scope id)

print(socket.getaddrinfo('www.xunlei.com',80))

Python의 소켓 네트워크 프로그래밍에 대한 자세한 소개(예제 포함)

소켓을 사용하여 간단한 웹 서버 구현

import socket
def reply_info(socketObj):
    # socketObj.send('ok')
    with open('hello.html') as f:
        socketObj.send(f.read().encode('utf-8'))
if __name__=="__main__":
    #1. 创建socket对象
    socket_server = socket.socket()
    #2. 绑定IP和端口
    socket_server.bind(('192.168.1.165',9999))
    print("服务器端已经启动9999端口......")
    #3. 监听是否有客户端连接
    socket_server.listen(5)

    while True:
        # 4. 接受客户端的连接
        socket_client,address = socket_server.accept()
        # 5. 接收客户端发来的信息
        data = socket_client.recv(1024)
        # 6. 与客户端进行交互, 返回给客户端信息
        reply_info(socket_server)
        socket_server.close()

위 내용은 Python의 소켓 네트워크 프로그래밍에 대한 자세한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제