Python ソケットを使用して文字列を送信する

Zeeshan Afridi 2023年1月30日
  1. Python のソケット
  2. Python でソケットを実現するための組み込みメソッド
  3. ソケットプログラミングにおけるクライアントとサーバー
  4. Python ソケットでクライアントサーバー通信を使用して文字列を送信する
Python ソケットを使用して文字列を送信する

この記事では、ソケット、ソケットに組み込まれているメソッド、サーバーとクライアント、および Python でソケットとの通信を成功させる方法について説明します。ソケットは、データを送受信するためのサーバー側とクライアント側の間のブリッジの役割を果たします。

Python コードでは、ソケットを作成し、ソケットを使用して文字列を渡し、クライアントとサーバー間の接続を確立します。

Python のソケット

ソケットは、データを送受信するために構築されたエンドポイントとして定義されます。1つのネットワークには 2つのソケットがあります。IP アドレスとポートの組み合わせはソケットに存在します。

1つのデバイスには、ポート番号に基づいて n 個のソケットがあります。さまざまなプロトコルでさまざまなタイプのポートを使用できます。

以下のいくつかの標準ポート番号とそのプロトコルがあります。

プロトコル 説明
HTTP そのポート番号は 80 で、Python ライブラリは httpliburllib、および xmlrpclib です。HTTP ポートは Web ページに使用されます。
FTP そのポート番号は 20 で、Python ライブラリは ftpliburllib です。このポートはファイル転送に使用されます。
NNTP そのポート番号は 119 で、Python ライブラリは nntplib です。このポートは、未送信のニュースに使用されます。
SMTP そのポート番号は 25 で、Python ライブラリは smtplib です。このポートは、電子メールの送信に使用されます。
TELNET そのポート番号は 23 で、Python ライブラリは telnetlib です。このポートはコマンドラインに使用されます。
Pop3 そのポート番号は 110 で、Python ライブラリは poplib です。このポートは、電子メールのフェッチに使用されます。
Gopher そのポート番号は 70 で、Python ライブラリは gopherlib です。このポートは、ドキュメントの転送に使用されます。

Python でソケットを実現するための組み込みメソッド

Python でソケットを実現するには、Socket モジュールまたはフレームワークをインポートする必要があります。これらのモジュールはすべて組み込みのメソッドで構成されており、ソケットの作成に役立ち、相互に関連付けるのにも役立ちます。

以下は、ソケット用のいくつかの堅牢な組み込みメソッドです。

  • Socket.socket() メソッドはソケットを作成します。クライアント側とサーバー側のように、両方の側で必要です。
  • Socket.accept() は接続を受け入れるために使用されます。Socket.accept() メソッドは、(conn、address)のような値のペアを返します。
  • Socket.bind() は、パラメーターとして指定されたアドレスをバインドするために使用されます。
  • Socket.close() は、ソケットが閉じていることを表します。
  • Socket.connect() は、パラメータとして指定されたアドレスを接続するために使用されます。
  • Socket.listen() は、サーバーまたはクライアントでコマンドをリッスンするために使用されます。

ソケットプログラミングにおけるクライアントとサーバー

以下では、ソケットプログラミングにおけるクライアントとサーバーの意味を学習します。

クライアント

サーバーから情報またはデータを受信するコンピューターまたはソフトウェアは、クライアントと呼ばれます。クライアントはサーバーにサービスを要求します。Web ブラウザはクライアントの最良の例です。

サーバ

サーバーは、ネットワークリソースを管理するために使用されるプログラム、コンピューター、またはデバイスです。サーバーは、同じデバイス、ローカルコンピューター、またはリモートの場合があります。

Python ソケットでクライアントサーバー通信を使用して文字列を送信する

Python ファイルのソケットから通信するための 2つのファイルを作成します。1つはサーバー側用で、もう 1つはクライアント側用です。そして、接続構築のための 2つのプログラムがあります。

Python ソケットのサーバー側

最初にサーバー側のコードを作成します。組み込みメソッドを使用してサーバー側のコードを作成します。

サーバー側のコードは次のとおりです。

import socket

s = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM
)  # Socket will create with TCP and IP protocols
# This method will bind the sockets with server and port no
s.bind(("localhost", 9999))
s.listen(1)  # Will allow a maximum of one connection to the socket
c, addr = s.accept()  # will wait for the client to accept the connection

print("CONNECTION FROM:", str(addr))  # Will display the address of the client

c.send(
    b"HELLO, Are you enjoying programming?/Great! Keep going"
)  # Will send message to the client after encoding

msg = "Take Care.............."
c.send(msg.encode())
c.close()  # Will disconnect from the server

出力:

This connection is from: ('127.0.0.1', 50802)

Python ソケットのクライアント側

クライアントはサーバーにメッセージを送信し、サーバーはそのメッセージに応答します。クライアント側も、コードに組み込まれているメソッドを使用します。

クライアント側では、最初にソケットを作成します。次に、ホストの IP アドレスとポート番号を接続します。

コード:

import socket

s = socket.socket(
    socket.AF_INET, socket.SOCK_STREAM
)  # Socket will create with TCP and, IP protocols
s.connect(("localhost", 9999))  # Will connect with the server
# Will receive the reply message string from the server at 1024 B
msg = s.recv(1024)

while msg:
    print("Received:" + msg.decode())
    msg = s.recv(1024)  # Will run as long as the message string is empty

s.close()  # Will disconnect the client

出力:

The message is Revived: HELLO, Are you enjoying programming?    Great! Keep going

The message is Revived: Take Care..............

指定されたコードが実行されると、サーバーとクライアントの間に接続が構築されます。接続後、クライアント画面にメッセージが表示されます。

メッセージは次のようになります。

HELLO, Are you enjoying programming?    Great! Keep going

そして、他のメッセージは次のようになります。

Take Care..............

このメッセージはサーバー側から送信されたため、クライアント側に表示されます。このようにして、コードが実行され、Python のソケットを介して文字列を送信する出力が得られます。

著者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

関連記事 - Python Socket