目次
ソケットを使用する理由
ソケットとは
Python でソケット プログラミングを実装する方法
サーバーとは
クライアントとは
传输 Python 对象
ホームページ バックエンド開発 Python チュートリアル Pythonソケットプログラミングの詳細な説明と実践ガイド

Pythonソケットプログラミングの詳細な説明と実践ガイド

Apr 22, 2023 pm 05:04 PM
プロトコル 通信網 sockets

今日のインターネットでは、ソケット プロトコルは最も重要な基盤の 1 つです。この記事では、Python でのソケット プログラミングの作業に関するすべての領域を説明します。

Pythonソケットプログラミングの詳細な説明と実践ガイド

ソケットを使用する理由

ソケットは、今日のネットワークを構成するさまざまな通信プロトコルであり、2 つの異なるプログラムまたはデバイス間での情報の送信を可能にします。可能になる。たとえば、ブラウザを開くと、クライアントとしてサーバーへの接続が作成され、情報が転送されます。

この通信原理を詳しく説明する前に、まずソケットとは何かを明確にしましょう。

ソケットとは

一般的に、ソケットはデータの送受信のために構築された内部アプリケーション プロトコルです。 1 つのネットワークには、通信するデバイスまたはプログラムごとに 1 つずつ、合計 2 つのソケットがあり、これらのソケットは IP アドレスとポートの組み合わせです。使用されるポート番号に応じて、1 つのデバイスが「n」個のソケットを持つことができ、異なるタイプのプロトコルに異なるポートを使用できます。

次の図は、いくつかの一般的なポート番号と関連プロトコル情報を示しています:

##アプリケーションHTTP#80httplib、urllib、リクエストWeb ページ、Web サイトFTP20NNTP##nttplib# #23##110

プロトコル

ポート番号

##Python ライブラリ









##ftplib


ファイル転送


#119



#ニュース転送


#SMTP

25

##smtplib


電子メールを送信



Telnet


##telnetlib


コマンド ライン


POP3


##poplib

メールを受信


ゴーファー


70

gopherlib

文書転送

ソケットの概念を理解したところで、Python のソケット モジュールを見てみましょう

Python でソケット プログラミングを実装する方法

Python でソケット プログラミングを実装するには、次のものが必要です。ソケットモジュールをインポートします。

#このモジュールのいくつかの重要なメソッドは次のとおりです:

#説明##socket.socket()socket.accept()##socket.bind()#パラメータとして指定されたアドレスにバインドするために使用されますsocket.close() ソケットを閉じるために使用されます
##メソッド




#ソケットの作成に使用されます (サーバーとクライアントの両方を作成する必要があります)


は接続を受け入れるために使用されます。これは値のペア (conn, address) を返します。conn はデータの送受信に使用される新しいソケット オブジェクトで、address は接続のもう一方の端のソケット アドレスです。





#socket.connect()


パラメータとして指定されたリモート アドレスに接続するために使用されます


socket.listen()


サーバーが接続を受け入れられるようにする

#

ソケット モジュールの重要性を理解したところで、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 是服务器的文件名
ログイン後にコピー

当然のことですが、サーバーが実行を開始します

Pythonソケットプログラミングの詳細な説明と実践ガイド

クライアントを実行するには、別の cmd ウィンドウを開いて次のように入力する必要があります:

pyclient.py
ログイン後にコピー

Pythonソケットプログラミングの詳細な説明と実践ガイド

# 以下のバッファ サイズを 7 に減らして、同じプログラムがどのようになるかを見てみましょう。

Pythonソケットプログラミングの詳細な説明と実践ガイド

図に示すように、7 バイトが転送された後、接続が終了します。

実際には、完全な情報を受け取っていないのに、接続が早期に切断されたため、これは問題です。この問題を解決しましょう。

複数の通信

クライアントが完全なメッセージを受信する前に接続を継続するには、while ループを使用できます

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"))
ログイン後にコピー

この変更後、各送信は 7 になります。単語セクションを参照して完全なメッセージを受け取ります。

しかし、これにより別の問題が発生します。接続は決して終了せず、いつ終了するかわかりません。また、クライアントがサーバーから受け取るメッセージや情報のサイズが実際にどれくらいなのかが分からない場合はどうなるでしょうか。この場合、コードの改善を続ける必要があります。

complete_info=''
while True:
msg = s.recv(7)
if len(msg)<=0:
break
complete_info += msg.decode("utf-8")
print(complete_info)
ログイン後にコピー

サーバー側では、以下に示すように close() メソッドを使用します。

clt.close()
ログイン後にコピー

出力は次のとおりです。

Pythonソケットプログラミングの詳細な説明と実践ガイド

程序会检查信息的大小,并将其打印到一次两个字节的缓冲区中,然后在完成连接后关闭连接。

传输 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ソケットプログラミングの詳細な説明と実践ガイド

以上がPythonソケットプログラミングの詳細な説明と実践ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11でMTUサイズを調整する方法 Windows 11でMTUサイズを調整する方法 Aug 25, 2023 am 11:21 AM

Windows 11 でインターネット接続が突然遅くなり、本書に記載されているすべての方法を試した場合、それはネットワークとは何の関係もなく、最大伝送単位 (MTU) に関係している可能性があります。システムが間違った MTU サイズでデータを送受信すると、問題が発生する可能性があります。この記事では、スムーズで中断のないインターネット接続のために Windows 11 で MTU サイズを変更する方法を学びます。 Windows 11 のデフォルトの MTU サイズはどれくらいですか? Windows 11 のデフォルトの MTU サイズは 1500 で、これが許容される最大値です。 MTU は最大伝送単位の略です。これは、ネットワーク上で送受信できる最大パケット サイズです。あらゆるサポートネットワーク

WLAN拡張モジュールが停止しました[修正] WLAN拡張モジュールが停止しました[修正] Feb 19, 2024 pm 02:18 PM

Windows コンピュータの WLAN 拡張モジュールに問題がある場合、インターネットから切断される可能性があります。この状況はイライラすることがよくありますが、幸いなことに、この記事では、この問題を解決し、ワイヤレス接続を再び正常に動作させるのに役立ついくつかの簡単な提案を提供します。 WLAN 拡張モジュールが停止しました。 WLAN 拡張モジュールが Windows コンピュータで動作を停止した場合は、次の提案に従って修正してください。 ネットワークとインターネットのトラブルシューティング ツールを実行して、ワイヤレス ネットワーク接続を無効にし、再度有効にします。 WLAN 自動構成サービスを再起動します。 電源オプションを変更します。 変更します。詳細な電源設定 ネットワーク アダプター ドライバーを再インストールする いくつかのネットワーク コマンドを実行する それでは、詳しく見てみましょう

win11のDNSサーバーエラーの解決方法 win11のDNSサーバーエラーの解決方法 Jan 10, 2024 pm 09:02 PM

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

Chrome、Google ドライブ、フォトでの「ネットワーク エラーの失敗」ダウンロードを修正してください。 Chrome、Google ドライブ、フォトでの「ネットワーク エラーの失敗」ダウンロードを修正してください。 Oct 27, 2023 pm 11:13 PM

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

修正: WD My Cloud が Windows 11 のネットワーク上に表示されない 修正: WD My Cloud が Windows 11 のネットワーク上に表示されない Oct 02, 2023 pm 11:21 PM

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

Windows 10 の右下に地球が表示されてインターネットにアクセスできない場合はどうすればよいですか? Win10 で地球がインターネットにアクセスできない問題のさまざまな解決策 Windows 10 の右下に地球が表示されてインターネットにアクセスできない場合はどうすればよいですか? Win10 で地球がインターネットにアクセスできない問題のさまざまな解決策 Feb 29, 2024 am 09:52 AM

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

Windows 11 で Wake on LAN を有効/無効にする方法 Windows 11 で Wake on LAN を有効/無効にする方法 Sep 06, 2023 pm 02:49 PM

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

Windows 11 でネットワーク接続の詳細とステータスを確認する方法 Windows 11 でネットワーク接続の詳細とステータスを確認する方法 Sep 11, 2023 pm 02:17 PM

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

See all articles