Pythonソケットプログラミングの詳細な説明と実践ガイド
今日のインターネットでは、ソケット プロトコルは最も重要な基盤の 1 つです。この記事では、Python でのソケット プログラミングの作業に関するすべての領域を説明します。
ソケットを使用する理由
ソケットは、今日のネットワークを構成するさまざまな通信プロトコルであり、2 つの異なるプログラムまたはデバイス間での情報の送信を可能にします。可能になる。たとえば、ブラウザを開くと、クライアントとしてサーバーへの接続が作成され、情報が転送されます。
この通信原理を詳しく説明する前に、まずソケットとは何かを明確にしましょう。
ソケットとは
一般的に、ソケットはデータの送受信のために構築された内部アプリケーション プロトコルです。 1 つのネットワークには、通信するデバイスまたはプログラムごとに 1 つずつ、合計 2 つのソケットがあり、これらのソケットは IP アドレスとポートの組み合わせです。使用されるポート番号に応じて、1 つのデバイスが「n」個のソケットを持つことができ、異なるタイプのプロトコルに異なるポートを使用できます。
次の図は、いくつかの一般的なポート番号と関連プロトコル情報を示しています:
プロトコル |
ポート番号 |
##Python ライブラリ | ##アプリケーション|
|
|
||
#119 | ##nttplib
|
|
|
25 |
##smtplib |
電子メールを送信 |
|
|
|
|
POP3 | ##110
##poplib |
メールを受信 |
|
|
gopherlib |
文書転送 |
ソケットの概念を理解したところで、Python のソケット モジュールを見てみましょう
Python でソケット プログラミングを実装する方法
Python でソケット プログラミングを実装するには、次のものが必要です。ソケットモジュールをインポートします。
#このモジュールのいくつかの重要なメソッドは次のとおりです:
##メソッド | #説明|
|
|
は接続を受け入れるために使用されます。これは値のペア (conn, address) を返します。conn はデータの送受信に使用される新しいソケット オブジェクトで、address は接続のもう一方の端のソケット アドレスです。 | ##socket.bind()|
|
|
|
|
# ソケット モジュールの重要性を理解したところで、Python でサーバーとクライアントを構築する方法を見てみましょう。 サーバーとはサーバーとは、ネットワーク リソースの管理に特に使用されるプログラム、コンピューター、またはデバイスのいずれかです。サーバーは、同じデバイスまたはコンピュータ上に配置することも、他のデバイスやコンピュータにローカルに接続することも、リモートに配置することもできます。サーバーにはデータベースサーバー、Webサーバー、プリントサーバーなどさまざまな種類があります。 サーバーは通常、socket.socket()、socket.bind()、socket.listen() などを使用して接続を確立し、クライアントにバインドします。次に、サーバーを作成するプログラムを作成しましょう。 import socket s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((socket.gethostname(),1234)) #port number can be anything between 0-65535(we usually specify non-previleged ports which are > 1023) s.listen(5) while True: clt,adr=s.accept() print(f"Connection to {adr}established") #f string is literal string prefixed with f which #contains python expressions inside braces clt.send(bytes("Socket Programming in Python","utf-8 ")) #to send info to clientsocket ログイン後にコピー ソケットを作成するために最初に必要な条件は、関連するモジュールをインポートすることです。次に、socket.socket() メソッドを使用してサーバー側ソケットを作成します。 AF_INET はインターネットからのアドレスを指します。これにはペア (ホスト、ポート) が必要です。ホストは URL または特定の Web サイトのアドレスです。 , ポート番号は整数です。 SOCK_STREAM は、TCP プロトコルの作成に使用されます。 bind() メソッドは、2 つのパラメータをタプル (ホスト、ポート) として受け入れます。ここで、小さいポート番号は通常、システムによって占有または予約されているため、4 桁のポート番号を使用するのが最善であることに注意してください。 listen() メソッドを使用すると、サーバーは接続を受け入れることができます。5 は同時に受け入れられる複数の接続のキューです。ここで指定できる最小値は 0 で、パラメーターが指定されていない場合は、デフォルトの適切なパラメーターが使用されます。 while ループでは接続を永久に受け入れることができます。clt と adr はクライアント オブジェクトとアドレスです。print ステートメントはクライアント ソケットのアドレスとポート番号を出力するだけです。最後に clt.send を使用してsend bytes データをユニットに送信します。 サーバーのセットアップが完了したので、クライアントに進みましょう。 クライアントとはクライアントは、サーバーから情報やサービスを受信するコンピューターまたはソフトウェアです。クライアント/サーバー モデルでは、クライアントはサーバーにサービスを要求します。最良の例は、Google Chrome、Firefox などの Web ブラウザです。これらの Web ブラウザは、ユーザーの指示に基づいて、必要な Web ページとサービスを提供するように Web サーバーに要求します。他の例には、オンライン ゲーム、オンライン チャットなどが含まれます。 ここで、Python プログラミング言語でクライアント プログラムを作成する方法を見てみましょう: import socket s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((socket.gethostname(), 2346)) msg=s.recv(1024) print(msg.decode("utf-8")) ログイン後にコピー まず、引き続きソケット モジュールをインポートし、サーバーの作成時と同様にソケットを作成します。 。次に、クライアントとサーバー間の接続を作成するには、(ホスト、ポート) を指定して connect() メソッドを使用する必要があります。 注: クライアントとサーバーが同じコンピュータ上にある場合は、gethostname を使用する必要があります。 (LAN – localip/WAN – publicip) ここで、クライアントはサーバーから何らかの情報を受け取りたいと考えています。このためには、recv() メソッドを使用する必要があります。情報は別の変数に保存されます。メッセージ 。転送される情報はバイト単位であることに注意することが重要です。上記のプログラムのクライアントでは、1 回の転送で最大 1024 バイト (バッファ サイズ) を受信できます。転送される情報の量に応じて、任意の数値を指定できます。 最後に、送信されているメッセージをデコードして出力します。 クライアント/サーバー プログラムの作成方法を説明したので、次にそれらを実行する必要がある方法を見てみましょう。 クライアントとサーバーの対話 これらのプログラムを実行するには、コマンド プログラムを開き、クライアント プログラムとサーバー プログラムが作成されたフォルダーに移動して、次のように入力する必要があります。 py server.py #这里,server.py 是服务器的文件名 ログイン後にコピー 当然のことですが、サーバーが実行を開始します クライアントを実行するには、別の cmd ウィンドウを開いて次のように入力する必要があります: pyclient.py ログイン後にコピー import socket s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((socket.gethostname(), 2346)) while True: msg=s.recv(7) print(msg.decode("utf-8")) ログイン後にコピー complete_info='' while True: msg = s.recv(7) if len(msg)<=0: break complete_info += msg.decode("utf-8") print(complete_info) ログイン後にコピー clt.close() ログイン後にコピー
程序会检查信息的大小,并将其打印到一次两个字节的缓冲区中,然后在完成连接后关闭连接。 传输 Python 对象目前为止我们仅仅掌握了传递字符串的方法,但是,Python 中的 Socket 编程也允许我们传输 Python 对象。这些对象可以是集合、元组、字典等。要实现这一点,需要用到 Python 的 pickle 模块。 Python pickle模块 当我们实际序列化或反序列化 Python 中的对象时,就会使用到 Python pickle 模块。让我们看一个小例子 import pickle mylist=[1,2,'abc'] mymsg = pickle.dumps(mylist) print(mymsg) ログイン後にコピー Output: b’x80x03]qx00(Kx01Kx02Xx03x00x00x00abcqx01e.’ ログイン後にコピー 在上面的程序中,mylist是使用pickle模块的dumps()函数序列化的。还要注意,输出以b开头,表示它已转换为字节。在 socket 编程中,可以实现此模块以在客户端和服务器之间传输 python 对象。 如何使用 pickle 模块传输 Python 对象 当我们将 pickle 与 socket 一起使用时,完全可以通过网络传输任何内容。 先来看看服务端代码 Server-Side: import socket import pickle a=10 s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((socket.gethostname(), 2133))#binding tuple s.listen(5) while True: clt , adr = s.accept() print(f"Connection to {adr}established") m={1:"Client", 2:"Server"} mymsg = pickle.dumps(m)#the msg we want to print later mymsg = {len(mymsg):{a}}"utf-8") + mymsg clt.send(mymsg) ログイン後にコピー 这里,m是一个字典,它基本上是一个需要从服务器发送到客户端的 Python 对象。这是通过首先使用dumps()序列化对象,然后将其转换为字节来完成的。 现在,让我们记下客户端: Client-Side: import socket import pickle a=10 s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((socket.gethostname(), 2133)) while True: complete_info = b'' rec_msg = True while True: mymsg = s.recv(10) if rec_msg: print(f"The length of message = {mymsg[:a]}") x = int (mymsg[:a ] ) rec_msg = False complete_info += mymsg if len(complete_info)-a == x: print("Recieved the complete info") print(complete_info[a:]) m = pickle.loads(complete_info[a:]) print(m) rec_msg = True complete_info = b'' print(complete_info) ログイン後にコピー 第一个while循环将帮助我们跟踪完整的消息(complete_info)以及正在使用缓冲区接收的消息(rec_msg)。 然后,在接收消息时,我们所做的就是打印每一位消息,并将其放在大小为10的缓冲区中接收。此大小可以是任何大小,具体取决于个人选择。 然后如果收到的消息等于完整消息,我们只会将消息打印为收到的完整信息,然后使用loads()反序列化消息。 输出如下: |
以上がPythonソケットプログラミングの詳細な説明と実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Windows 11 でインターネット接続が突然遅くなり、本書に記載されているすべての方法を試した場合、それはネットワークとは何の関係もなく、最大伝送単位 (MTU) に関係している可能性があります。システムが間違った MTU サイズでデータを送受信すると、問題が発生する可能性があります。この記事では、スムーズで中断のないインターネット接続のために Windows 11 で MTU サイズを変更する方法を学びます。 Windows 11 のデフォルトの MTU サイズはどれくらいですか? Windows 11 のデフォルトの MTU サイズは 1500 で、これが許容される最大値です。 MTU は最大伝送単位の略です。これは、ネットワーク上で送受信できる最大パケット サイズです。あらゆるサポートネットワーク
![WLAN拡張モジュールが停止しました[修正]](https://img.php.cn/upload/article/000/465/014/170832352052603.gif?x-oss-process=image/resize,m_fill,h_207,w_330)
Windows コンピュータの WLAN 拡張モジュールに問題がある場合、インターネットから切断される可能性があります。この状況はイライラすることがよくありますが、幸いなことに、この記事では、この問題を解決し、ワイヤレス接続を再び正常に動作させるのに役立ついくつかの簡単な提案を提供します。 WLAN 拡張モジュールが停止しました。 WLAN 拡張モジュールが Windows コンピュータで動作を停止した場合は、次の提案に従って修正してください。 ネットワークとインターネットのトラブルシューティング ツールを実行して、ワイヤレス ネットワーク接続を無効にし、再度有効にします。 WLAN 自動構成サービスを再起動します。 電源オプションを変更します。 変更します。詳細な電源設定 ネットワーク アダプター ドライバーを再インストールする いくつかのネットワーク コマンドを実行する それでは、詳しく見てみましょう

インターネットにアクセスするには、インターネットに接続するときに正しい DNS を使用する必要があります。同様に、間違った DNS 設定を使用すると、DNS サーバー エラーが発生しますが、このときは、ネットワーク設定で DNS を自動的に取得するように選択することで問題を解決できます。ソリューション。 win11 ネットワーク dns サーバー エラーを解決する方法. 方法 1: DNS をリセットする 1. まず、タスクバーの [スタート] をクリックして入力し、[設定] アイコン ボタンを見つけてクリックします。 2. 次に、左側の列の「ネットワークとインターネット」オプションコマンドをクリックします。 3. 次に、右側で「イーサネット」オプションを見つけ、クリックして入力します。 4. その後、DNSサーバーの割り当ての「編集」をクリックし、最後にDNSを「自動(D)」に設定します。

「ネットワーク エラーのダウンロードに失敗しました」問題とは何ですか?解決策を詳しく説明する前に、まず「ネットワーク エラーのダウンロードに失敗しました」問題が何を意味するのかを理解しましょう。このエラーは通常、ダウンロード中にネットワーク接続が中断された場合に発生します。この問題は、インターネット接続の弱さ、ネットワークの混雑、サーバーの問題など、さまざまな理由で発生する可能性があります。このエラーが発生すると、ダウンロードが停止し、エラー メッセージが表示されます。ネットワークエラーで失敗したダウンロードを修正するにはどうすればよいですか? 「ネットワーク エラー ダウンロードに失敗しました」というメッセージが表示されると、必要なファイルへのアクセスまたはダウンロード中に障害が発生する可能性があります。 Chrome などのブラウザを使用している場合でも、Google ドライブや Google フォトなどのプラットフォームを使用している場合でも、このエラーはポップアップ表示され、不便を引き起こします。この問題を解決し、解決するために役立つポイントを以下に示します。

WDMyCloud が Windows 11 のネットワーク上に表示されない場合、特にそこにバックアップやその他の重要なファイルを保存している場合は、大きな問題になる可能性があります。これは、ネットワーク ストレージに頻繁にアクセスする必要があるユーザーにとって大きな問題となる可能性があるため、今日のガイドでは、この問題を永久に修正する方法を説明します。 WDMyCloud が Windows 11 ネットワークに表示されないのはなぜですか? MyCloud デバイス、ネットワーク アダプター、またはインターネット接続が正しく構成されていません。パソコンにSMB機能がインストールされていません。 Winsock の一時的な不具合がこの問題を引き起こす場合があります。クラウドがネットワーク上に表示されない場合はどうすればよいですか?問題の修正を開始する前に、いくつかの予備チェックを実行できます。

この記事では、Win10のシステムネットワーク上に地球儀マークが表示されるがインターネットにアクセスできない問題の解決策を紹介します。この記事では、地球がインターネットにアクセスできないことを示す Win10 ネットワークの問題を読者が解決するのに役立つ詳細な手順を説明します。方法 1: 直接再起動する まず、ネットワーク ケーブルが正しく接続されていないこと、ブロードバンドが滞っていないかを確認します。ルーターまたは光モデムが停止している可能性があります。この場合は、ルーターまたは光モデムを再起動する必要があります。コンピュータ上で重要な作業が行われていない場合は、コンピュータを直接再起動できます。ほとんどの軽微な問題は、コンピュータを再起動することですぐに解決できます。ブロードバンドが滞っておらず、ネットワークが正常であると判断される場合は、別の問題です。方法 2: 1. [Win]キーを押すか、左下の[スタートメニュー]をクリックし、表示されるメニュー項目の電源ボタンの上にある歯車アイコンをクリックし、[設定]をクリックします。

Wake on LAN は、コンピュータを休止状態またはスリープ モードからリモートで復帰できるようにする Windows 11 のネットワーク機能です。カジュアル ユーザーはあまり使用しませんが、この機能は有線ネットワークを使用するネットワーク管理者やパワー ユーザーにとっては便利です。今回はその設定方法を説明します。自分のコンピューターが Wake on LAN をサポートしているかどうかを確認するにはどうすればよいですか?この機能を使用するには、コンピュータに次のものが必要です。 リモートからスリープ モードから復帰できるように、PC を ATX 電源に接続する必要があります。アクセス コントロール リストを作成し、ネットワーク内のすべてのルーターに追加する必要があります。ネットワーク カードは Wake-up-on-LAN 機能をサポートしている必要があります。この機能が動作するには、両方のコンピュータが同じネットワーク上にある必要があります。ほとんどのイーサネット アダプタは

ネットワーク接続が適切に機能していることを確認するため、または問題を解決するために、Windows 11 のネットワーク接続の詳細を確認する必要がある場合があります。これにより、IP アドレス、MAC アドレス、リンク速度、ドライバーのバージョンなどのさまざまな情報を表示できます。このガイドでは、その方法を説明します。 Windows 11 でネットワーク接続の詳細を確認するにはどうすればよいですか? 1. 「設定」アプリを使用し、+ キーを押して Windows の設定を開きます。 WindowsI 次に、左側のペインで [ネットワークとインターネット] に移動し、ネットワークの種類を選択します。この場合、これはイーサネットです。ワイヤレス ネットワークを使用している場合は、代わりに Wi-Fi ネットワークを選択します。画面の下部に次のように表示されます。
