Socket の本来の英語の意味は「穴」または「ソケット」です。 BSD UNIX のプロセス通信メカニズムとして、一般に「ソケット」とも呼ばれます。これは、IP アドレスとポートを記述するために使用され、通信チェーンのハンドルであり、異なる仮想マシンまたは異なるコンピューター間の通信を実装するために使用できます。 。
ネットワーク上の 2 つのプログラムは、双方向通信接続を通じてデータを交換します。この接続の一端はソケットと呼ばれます。
ネットワーク通信接続を確立するには、少なくともペアのポート番号 (ソケット) が必要です。ソケットは本質的には TCP/IP をカプセル化するプログラミング インターフェイス (API) であり、TCP/IP はプログラマーがネットワーク開発に使用するインターフェイスも提供します。これは、ソケット プログラミング インターフェイスであり、カプセル化または表示する手段を提供します。データ。ソケットはネットワーク通信機能を提供します。
Pythonのソケットについて話しましょう。
1.socketモジュール
ソケットを作成するにはsocket.socket()関数を使用します。構文は次のとおりです:
socket.socket(socket_family,socket_type,protocol=0)
socket_family には次のパラメータを指定できます:
socket.AF_INET IPv4 (デフォルト)
socket.AF_INET6
sock et.AF_UNIX では、単一の Unix システムのプロセス間通信にのみ使用されます
socket_type は次のパラメータになります:
socket.SOCK_STREAM ストリーミングソケット、TCP 用 (デフォルト)
socket.SOCK_DGRAM データグラムソケット、UDP 用
socket.SOCK_RAW Raw ソケット通常のソケットは ICMP や IGMP などのネットワーク メッセージを処理できませんが、SOCK_RAW は処理できます。次に、SOCK_RAW は特殊な IPv4 メッセージも処理できます。さらに、生のソケットを使用すると、ユーザーが IP_HDRINCL ソケット オプションの IP ヘッダーを介してメッセージを構築できます。
socket.SOCK_RDM は UDP の信頼できる形式であり、データグラムの配信を保証しますが、順序は保証しません。 SOCK_RAM は、元のプロトコルへの低レベルのアクセスを提供するために使用され、ICMP メッセージの送信など、特定の特殊な操作を実行する必要がある場合に使用されます。 SOCK_RAM は通常、パワー ユーザーまたは管理者によって実行されるプログラムに制限されます。
socket.SOCK_SEQPACKET 信頼性の高い連続パケットサービス
プロトコルパラメータ:
0 (デフォルト) 0の場合、システムはアドレス形式とソケットカテゴリに基づいて自動的に選択します。プロトコル
2.ソケットオブジェクトの組み込みメソッド
サーバー側のソケット関数
s.bind() アドレス(IPアドレス、ポート)をソケットにバインド、パラメータはタプル形式である必要があります 例: s.bind (('127.0.0.1',8009))
s.listen(5) リッスンを開始します。5 は保留中の接続の最大数です
s.accept() クライアント接続を受動的に受け入れ、ブロックし、接続を待機します
Clientソケット関数
s.connect() サーバーに接続します。パラメータはタプル形式である必要があります。例: s.connect(('127,0.0.1',8009))
公共目的のソケット関数
s .recv(1024) TCP データを受信します。1024 は 1 回のデータ受信のサイズです
s.send(bytes) TCP データを送信します。Python3 の送信データの形式はバイト形式である必要があります
s.sendall( ) データを送信します内部ループはsend
s.close()を呼び出してソケットをクローズします 例1. ソケットプログラムの簡単な実装サーバー側#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socket import time IP_PORT = ('127.0.0.1',8009) BUF_SIZE = 1024 tcp_server = socket.socket() tcp_server.bind(IP_PORT) tcp_server.listen(5) while True: print("waiting for connection...") conn,addr = tcp_server.accept() print("...connected from:",addr) while True: data = tcp_server.recv(BUF_SIZE) if not data:break tcp_server.send('[%s] %s'%(time.ctime(),data)) tcp_server.close()上記コードの説明: 1~4行
最初の行はUnixの起動情報行で、その後にtimeモジュールとsocketモジュールがインポートされます5~10行IP_PORTはグローバル変数のIPアドレスとポートを宣言しており、bind()関数がこのアドレスとバッファーにバインドされます。サイズは 1K に設定され、listen() 関数は、同時に受信できる接続の最大数を示します 11~ 最後の行まで サーバーのループに入ったら、接続が到着するまで受動的に待ちます。接続がある場合は、会話ループに入り、クライアントがデータを送信するのを待ちます。メッセージが空の場合は、クライアントが終了したことを意味し、ループから抜け出して次の接続の到着を待ちます。クライアント メッセージを取得したら、メッセージの前にタイムスタンプを追加して戻ります。ループが終了せず、サーバーが close() を実行しないため、最後の行は実行されません。 close() 関数を呼び出すことを忘れないように注意してください。 クライアント側
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socket HOST = '127.0.0.1' PORT = 8009 BUF_SIZE = 1024 ADDR = (HOST,PORT) client = socket.socket() client.connect(ADDR) while True: data = input(">>> ") if not data:break client.send(bytes(data,encoding='utf-8')) recv_data = client.recv(BUF_SIZE) if not recv_data:break print(recv_data.decode()) client.close()5~11行目HOST変数とPORT変数はサーバーのIPアドレスとポート番号を表します。デモは同じサーバー上にあるため、IP アドレスはすべて 127.0.0.1 になります。他のサーバーで実行する場合は、対応する変更を行う必要があります。ポート番号はサーバーのポート番号と正確に一致する必要があります。一致しないと通信できません。バッファサイズは 1K のままです。 10 行目でクライアントソケットが作成され、サーバーに接続されます 13~21 行目 クライアントも無限ループします。 次の 2 つの条件のいずれかが発生すると、クライアントのループは終了します。 1. ユーザー 入力が空です。またはサーバー側の応答メッセージが空です。それ以外の場合、クライアントはユーザーが入力した文字列を処理のためにサーバーに送信し、表示サーバーから返されたタイムスタンプ付きの文字列を受信します。 クライアントプログラムとサーバープログラムを実行します以下はクライアントの入力と出力です
[root@pythontab]# python client.py >>> hello python [Thu Sep 15 22:29:12 2016] b'hello python'以下はサーバーの出力です
[root@pythontab]# python server.py waiting for connection... ...connected from: ('127.0.0.1', 55378)3.ソケットサーバーモジュールソケットサーバーは、標準ライブラリ。ネットワーク クライアントとサーバーの実装に必要な大量の定型コードを簡素化するために使用されます。使用できるいくつかのクラスはモジュールに実装されています。 例 1: ソケットサーバーを使用して、上記のソケット() の例と同じ機能を実現します
服务端程序代码
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import socketserver import time HOST = '127.0.0.1' PORT = 8009 ADDR = (HOST,PORT) BUF_SIZE = 1024 class Myserver(socketserver.BaseRequestHandler): def handle(self): while True: print("...connected from:",self.client_address) data = self.request.recv(BUF_SIZE) if not data:break self.request.send(bytes("%s %s"%(time.ctime(),data))) server = socketserver.ThreadingTCPServer(ADDR,Myserver) print("waiting for connection...") server.serve_forever()
11~17行
主要的工作在这里。从socketserver的BaseRequestHandler类中派生出一个子类,并重写handle()函数。
在有客户端发进来的消息的时候,handle()函数就会被调用。
19~21行
代码的最后一部分用给定的IP地址和端口加上自定义处理请求的类(Myserver)。然后进入等待客户端请求与处理客户端请求的无限循环中。
客户端程序代码
import socket HOST = '127.0.0.1' PORT = 8009 ADDR = (HOST,PORT) BUF_SIZE = 1024 client = socket.socket() client.connect(ADDR) while True: data = input(">>> ") if not data:continue client.send(bytes(data,encoding='utf-8')) recv_data = client.recv(BUF_SIZE) if not recv_data:break print(recv_data.decode()) client.close()
执行服务端和客户端代码
下面是客户端输出
[root@pythontab]# python socketclient.py >>> hello python Thu Sep 15 23:53:31 2016 b'hello python' >>> hello pythontab Thu Sep 15 23:53:49 2016 b'hello pythontab'
下面是服务端输出
[root@pythontab]# python socketserver.py waiting for connection... ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385) ...connected from: ('127.0.0.1', 55385)
以上がPythonのソケットモジュールの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Pythonの実際のアプリケーションには、データ分析、Web開発、人工知能、自動化が含まれます。 1)データ分析では、PythonはPandasとMatplotlibを使用してデータを処理および視覚化します。 2)Web開発では、DjangoおよびFlask FrameworksがWebアプリケーションの作成を簡素化します。 3)人工知能の分野では、TensorflowとPytorchがモデルの構築と訓練に使用されます。 4)自動化に関しては、ファイルのコピーなどのタスクにPythonスクリプトを使用できます。

Pythonは、データサイエンス、Web開発、自動化スクリプトフィールドで広く使用されています。 1)データサイエンスでは、PythonはNumpyやPandasなどのライブラリを介してデータ処理と分析を簡素化します。 2)Web開発では、DjangoおよびFlask Frameworksにより、開発者はアプリケーションを迅速に構築できます。 3)自動化されたスクリプトでは、Pythonのシンプルさと標準ライブラリが理想的になります。

Pythonの柔軟性は、マルチパラダイムサポートと動的タイプシステムに反映されていますが、使いやすさはシンプルな構文とリッチ標準ライブラリに由来しています。 1。柔軟性:オブジェクト指向、機能的および手続き的プログラミングをサポートし、動的タイプシステムは開発効率を向上させます。 2。使いやすさ:文法は自然言語に近く、標準的なライブラリは幅広い機能をカバーし、開発プロセスを簡素化します。

Pythonは、初心者から上級開発者までのすべてのニーズに適した、そのシンプルさとパワーに非常に好まれています。その汎用性は、次のことに反映されています。1)学習と使用が簡単、シンプルな構文。 2)Numpy、Pandasなどの豊富なライブラリとフレームワーク。 3)さまざまなオペレーティングシステムで実行できるクロスプラットフォームサポート。 4)作業効率を向上させるためのスクリプトおよび自動化タスクに適しています。

はい、1日2時間でPythonを学びます。 1.合理的な学習計画を作成します。2。適切な学習リソースを選択します。3。実践を通じて学んだ知識を統合します。これらの手順は、短時間でPythonをマスターするのに役立ちます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
