python socketの簡単な通信を実現するコードの例
まず、簡単にsocketを紹介します。
(詳しく紹介したのはネットで探してもいいです。全部詳しく話しています。)ここは主に私自身の理解です。
socketはアプリケーション層とトランスポート層の間の抽象層であり、その本質はプログラミングインターフェースであり、socketを通じてTCP/IPプロトコルを実現することができる。
これは、最下層メッセージの受信と送信を処理するための下地セットです。
ソケットをソケットに翻訳すると、TCP/IPの複雑な動作を簡単ないくつかのインターフェースとして抽象化して、階層調整を提供して、ネットワークにおけるプロセスの通信を実現することができます。socketはUnixから起源しています。Unixの基本的な要素の一つは「すべてファイル」です。つまり、開くことによって、読み書くことができます。閉じたモードで操作できます。この点によって、socketの簡単な作成ができます。
ここにsocketの作業原理に関する具体的な画像を貼り付けます。
皆さんは分からないことがあったら、まず焦らないでください。下の図を見てから、この図を結び付けて理解してください。
実は、本機ではPIDを通じて唯一のプロセスを識別することができますが、ネットワークの中の二つのプロセスが通信するとPIDの衝突が大きくなります。この時、IPプロトコルのIPアドレスはホストを識別することができます。TCPのプロトコルとポート番号はホストのプロセスを識別することができます。だから、ipアドレス+プロトコル+ポート番号でネットワークのプロセスを特定できます。
大体分かりました。pythonのsocketライブラリについて話します。
まず簡単にいくつかのsocketの倉庫の中のパラメーターを紹介します。
まずは住所です。
sockett.AF_INETはIPv 4を表しています。
sockett.AF_INE 6はIPv 6を表しています。
sockett.AF_UNIXというのは主に単一のUNIXプロセス間の通信に使われます。
そしてTYpe:
sockett.SOCK_STREAM/流式socketTCPプロトコル(デフォルト)は、データの順序と信頼性を保証するために使用されます。
sockett.SOCK_DGRAM//これは報式socket UDPプロトコルで、データの受け入れ順序を保証します。信頼できない接続です。
sockett.SOCK_RAW///これは元のソケットで、下のプロトコル(TCP/IP)への直接アクセスが可能です。
ここのフロー式とデータ新聞式は実は向いている違いです。
フロー式は接続に向けたTCPサービスアプリケーションで、データグラム式は接続に向けないUDPサービスアプリケーション、つまり無接続のsocketです。
いくつかの方法の使用が続く。
1:sk=socket.socket():括弧には二つのパラメータが含まれています。一つのパラメータはデフォルトではipアドレスが上乗せされているsocket.AF_です。INET、つまりIPv 4です。もう一つのデフォルトはTCPプロトコル、つまりsocket.SOCK_です。STREAM
2:SK.bind():一番奥の括弧には二つのパラメータが含まれています。それぞれクライアントのipアドレスとポート番号です。
3:sk.listen(n):中のnはブロック接続nプロセス、つまり最大待ち時間数n個を表します。あるプロセスに接続した後、他のものは接続されなくなり、待ち状態になります。切断とこのプロセスとの接続だけが必要です。他のプロセスは順次接続されます。
4 a、b=sk.accept():戻るのはタプルで、タプルの最初のパラメータは接続情報で、2番目のパラメータはクライアントのipアドレスとポート番号です。
5 a.recv(1024):recv()は受信情報を表し、中の1024は最も受信可能なバイト数を示し、余分な文字があれば次回に送信する。
大体のパラメーターの説明が終わりました。これからサービスのシナリオの作成を始めます。
左のウィンドウはサービスエンドコードで、右のウィンドウはクライアントコードです。サービスセンターでbyeを入力した後、会話全体が閉じられます。
以上がsocketの簡単な通信です。
最後にUDPの専用コード(UDPとTCPのコードは大体同じです。
sendto():この関数はUDPを使ってデータを送るために使います。
recvform():UDP専用で、データを受け取り、データの遠端のIPアドレスとポートを返します。
closc():socketを閉じる
みんなが興味があれば、自分でUDPのシナリオを試してみてもいいです。ここでは具体的なモデルを作りません。
ここでは、pythonがsocketの簡単な通信を実現するためのコード例についての記事を紹介します。python socketに関する通信内容は以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。
(詳しく紹介したのはネットで探してもいいです。全部詳しく話しています。)ここは主に私自身の理解です。
socketはアプリケーション層とトランスポート層の間の抽象層であり、その本質はプログラミングインターフェースであり、socketを通じてTCP/IPプロトコルを実現することができる。
これは、最下層メッセージの受信と送信を処理するための下地セットです。
ソケットをソケットに翻訳すると、TCP/IPの複雑な動作を簡単ないくつかのインターフェースとして抽象化して、階層調整を提供して、ネットワークにおけるプロセスの通信を実現することができます。socketはUnixから起源しています。Unixの基本的な要素の一つは「すべてファイル」です。つまり、開くことによって、読み書くことができます。閉じたモードで操作できます。この点によって、socketの簡単な作成ができます。
ここにsocketの作業原理に関する具体的な画像を貼り付けます。
皆さんは分からないことがあったら、まず焦らないでください。下の図を見てから、この図を結び付けて理解してください。
実は、本機ではPIDを通じて唯一のプロセスを識別することができますが、ネットワークの中の二つのプロセスが通信するとPIDの衝突が大きくなります。この時、IPプロトコルのIPアドレスはホストを識別することができます。TCPのプロトコルとポート番号はホストのプロセスを識別することができます。だから、ipアドレス+プロトコル+ポート番号でネットワークのプロセスを特定できます。
大体分かりました。pythonのsocketライブラリについて話します。
まず簡単にいくつかのsocketの倉庫の中のパラメーターを紹介します。
まずは住所です。
sockett.AF_INETはIPv 4を表しています。
sockett.AF_INE 6はIPv 6を表しています。
sockett.AF_UNIXというのは主に単一のUNIXプロセス間の通信に使われます。
そしてTYpe:
sockett.SOCK_STREAM/流式socketTCPプロトコル(デフォルト)は、データの順序と信頼性を保証するために使用されます。
sockett.SOCK_DGRAM//これは報式socket UDPプロトコルで、データの受け入れ順序を保証します。信頼できない接続です。
sockett.SOCK_RAW///これは元のソケットで、下のプロトコル(TCP/IP)への直接アクセスが可能です。
ここのフロー式とデータ新聞式は実は向いている違いです。
フロー式は接続に向けたTCPサービスアプリケーションで、データグラム式は接続に向けないUDPサービスアプリケーション、つまり無接続のsocketです。
いくつかの方法の使用が続く。
1:sk=socket.socket():括弧には二つのパラメータが含まれています。一つのパラメータはデフォルトではipアドレスが上乗せされているsocket.AF_です。INET、つまりIPv 4です。もう一つのデフォルトはTCPプロトコル、つまりsocket.SOCK_です。STREAM
2:SK.bind():一番奥の括弧には二つのパラメータが含まれています。それぞれクライアントのipアドレスとポート番号です。
3:sk.listen(n):中のnはブロック接続nプロセス、つまり最大待ち時間数n個を表します。あるプロセスに接続した後、他のものは接続されなくなり、待ち状態になります。切断とこのプロセスとの接続だけが必要です。他のプロセスは順次接続されます。
4 a、b=sk.accept():戻るのはタプルで、タプルの最初のパラメータは接続情報で、2番目のパラメータはクライアントのipアドレスとポート番号です。
5 a.recv(1024):recv()は受信情報を表し、中の1024は最も受信可能なバイト数を示し、余分な文字があれば次回に送信する。
大体のパラメーターの説明が終わりました。これからサービスのシナリオの作成を始めます。
# -*-coding: utf-8 -*-
# socket
import socket
# ip AF_INET(IPv4), TCP ,SOCK_STREAM
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# ip ,ip ip , ,
ip_port=('127.0.0.1',8000)
#
sk.bind(ip_port)
# , 3 , 3 , 3
sk.listen(3)
# , ,a ,b ip
a,b=sk.accept()
print(a)
while True:
data=a.recv(1024)# recv ,1024
print(data.decode('utf-8'))
message=input("you can say:")
a.send(message.encode('utf-8'))
if message==('bye'):
break
次にクライアントのスクリプトを作成します。
# -*- coding:utf-8 -*-
# socket
import socket
# ip AF_INET, IPv4; (TCP)SOCK_STREAM
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# IP
ip_port=('127.0.0.1',8000)
#
client.connect(ip_port)
while True:
message=input('You can say:')
client.send(message.encode('utf-8'))#
a=client.recv(1024)# , 1k
print(a.decode('utf-8'))
if a.decode('utf-8')=='bye':
break
これは運行の結果です。左のウィンドウはサービスエンドコードで、右のウィンドウはクライアントコードです。サービスセンターでbyeを入力した後、会話全体が閉じられます。
以上がsocketの簡単な通信です。
最後にUDPの専用コード(UDPとTCPのコードは大体同じです。
sendto():この関数はUDPを使ってデータを送るために使います。
recvform():UDP専用で、データを受け取り、データの遠端のIPアドレスとポートを返します。
closc():socketを閉じる
みんなが興味があれば、自分でUDPのシナリオを試してみてもいいです。ここでは具体的なモデルを作りません。
ここでは、pythonがsocketの簡単な通信を実現するためのコード例についての記事を紹介します。python socketに関する通信内容は以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。