この記事では、Python でソケットを介した TCP 通信の実装を紹介します (サンプル付き)。一定の参考価値があります。必要な友人は参考にしてください。お役に立てば幸いです。あなたに。役に立ちます。
TCP
TCP (伝送制御プロトコル) は、IETF の RFC 793 定義によって開発された、コネクション指向で信頼性の高いバイト ストリーム ベースのトランスポート層通信プロトコルです。 。コンピュータ ネットワークの簡略化された OSI モデルでは、第 4 層のトランスポート層で指定された機能を完了します。ユーザー データグラム プロトコル (UDP) は、同じ層内のもう 1 つの重要なトランスポート プロトコルです [1]。インターネット プロトコル スイートにおいて、TCP 層は、IP 層の上、アプリケーション層の下に位置する中間層です。多くの場合、異なるホストのアプリケーション層間には信頼性の高いパイプのような接続が必要ですが、IP 層はそのようなフロー メカニズムを提供せず、信頼性の低いパケット スイッチングを提供します。
以下は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 接続が作成されると、接続を開始する人はクライアントと呼ばれ、
接続への応答を開始される人はサーバーと呼ばれます。
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 はクライアント プログラムです。
接続が確立されたばかりのときの概略図
Oneコミュニケーション 完成図
以上がPython での TCP 通信のソケット実装の概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。