ホームページ >バックエンド開発 >Python チュートリアル >Python での TCP 通信のソケット実装の概要 (例付き)

Python での TCP 通信のソケット実装の概要 (例付き)

不言
不言転載
2018-10-13 16:39:343919ブラウズ

この記事では、Python でソケットを介した TCP 通信の実装を紹介します (サンプル付き)。一定の参考価値があります。必要な友人は参考にしてください。お役に立てば幸いです。あなたに。役に立ちます。

TCP

TCP (伝送制御プロトコル) は、IETF の RFC 793 定義によって開発された、コネクション指向で信頼性の高いバイト ストリーム ベースのトランスポート層通信プロトコルです。 。コンピュータ ネットワークの簡略化された OSI モデルでは、第 4 層のトランスポート層で指定された機能を完了します。ユーザー データグラム プロトコル (UDP) は、同じ層内のもう 1 つの重要なトランスポート プロトコルです [1]。インターネット プロトコル スイートにおいて、TCP 層は、IP 層の上、アプリケーション層の下に位置する中間層です。多くの場合、異なるホストのアプリケーション層間には信頼性の高いパイプのような接続が必要ですが、IP 層はそのようなフロー メカニズムを提供せず、信頼性の低いパケット スイッチングを提供します。

以下はTCP通信を実現するソケットの模式図であり、これに沿ってプログラムを記述していきます

Python での TCP 通信のソケット実装の概要 (例付き)

TCP サーバー

サーバー プロセスは、まずポートをバインドし、他のクライアントからの接続をリッスンする必要があります。クライアントが接続すると、サーバーはクライアントとのソケット接続を確立し、その後の通信はこのソケット接続に依存します。

クライアント接続を受信し、クライアントからのリクエストに応答する単純なサーバー プログラムを作成してみましょう。

import socket
server = socket.socket()
server.bind(('192.168.1.165',8900))
#调用 listen() 方法开始监听端口, 传入的参数指定等待连接的最大数量
server.listen(4)
serObj,address = server.accept()
#当有客户端访问时,实现两边的交流,如果有一方退出,整个程序退出。
#服务器程序通过一个永久循环来接受来自客户端的连接
#这里虽然给出最大连接数为4,但单线程程序也只会响应一个连接
while True:
#建立连接后,服务端等待客户端发送的数据,实现通信
    re_data = serObj.recv(1024).decode('utf-8')
    print('client>>',re_data)
    if re_data == 'quit':
        break
    send_data = input('server>>')
    serObj.send(send_data.encode('utf-8'))
    if send_data == 'quit':
        break
serObj.close()
server.close()

TCP クライアント

ほとんどの接続は信頼性の高い TCP 接続です。 TCP 接続が作成されると、接続を開始する人はクライアントと呼ばれ、
接続への応答を開始される人はサーバーと呼ばれます。

たとえば、ブラウザで Sina にアクセスすると、私たち自身のコンピュータがクライアントとなり、ブラウザは積極的に Sina のサーバーへの接続を開始します。すべてがうまくいけば、Sina のサーバーは接続を受け入れ、TCP 接続が確立され、その後の通信で Web ページのコンテンツが送信されます。

TCP 接続をアクティブに開始するには、クライアントはサーバーの IP アドレスとポート番号を知っている必要があります。

import socket
client = socket.socket()
client.connect(('192.168.1.165',8900))
while True:
    send_data = input("client>>")
    client.send(send_data.encode('utf-8'))
    if send_data == 'quit':
        break
    re_data = client.recv(1024).decode('utf-8')
    if re_data == 'quit':
        break
    print("server>>",re_data)

client.close()

1 つのウィンドウを使用してクライアントを実行し、別のウィンドウを使用してサーバーを実行すると、効果をより直感的に確認できます。
ここで、私の 08_pra.py はサーバー プログラム、09_pra.py はクライアント プログラムです。

接続が確立されたばかりのときの概略図

Python での TCP 通信のソケット実装の概要 (例付き)

Oneコミュニケーション 完成図

Python での TCP 通信のソケット実装の概要 (例付き)

以上がPython での TCP 通信のソケット実装の概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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