ホームページ >バックエンド開発 >Python チュートリアル >Python でのソケット ネットワーク プログラミングの詳細な紹介 (例付き)

Python でのソケット ネットワーク プログラミングの詳細な紹介 (例付き)

不言
不言転載
2018-10-13 16:34:493157ブラウズ

この記事では、Python でのソケット ネットワーク プログラミングの詳細を紹介します (例とともに)。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。

#ネットワーク通信の 3 つの要素

  • IP

通信するときは、双方が電子メールを送信するときに相手の電子メール アドレスを知っている必要があるのと同じように、相手の身元を知っておく必要があります。インターネット上のすべてのコンピュータの一意の識別子は、123.123.123.123 のような IP アドレスです。

IP アドレスは実際には 32 ビットの整数 (IPv4 と呼ばれます) です。192.168.0.1 などの文字列で表される IP アドレスは、実際には 8 ビットごとにグループ化された 32 ビットの整数です。目的は、読み取りを容易にすることです。 . .

IPv6 アドレスは実際には 128 ビットの整数であり、現在使用されている IPv4 のアップグレードされたバージョンであり、文字列で表されます。 2001:0db8:85a3:0042:1000:8a2e:0370:7334 に似ています。

  • ポート port

2 台のコンピュータが通信する場合、IP アドレスを送信するだけでは十分ではありません。同じコンピュータ、ネットワーク プログラム。 IP パケットが到着した後、それがブラウザに渡されるか QQ に渡されるかを区別するためにポート番号が必要です。

各ネットワーク プログラムは、オペレーティング システムからの一意のポート番号を申請します。このように、2 つのプロセスは、2 台のコンピュータ間のネットワーク接続を確立するために、独自の IP アドレスとそれぞれのポート番号を必要とします。


  • TCP/UDP プロトコル

世界中のさまざまな種類のコンピュータを接続するために、世界的に受け入れられている A のセットプロトコル、誰もがインターネット プロトコルを 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 でのソケット ネットワーク プログラミングの詳細な紹介 (例付き)

ソケットを使用して単純な Web サーバーを実装する

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。