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は最も受信可能なバイト数を示し、余分な文字があれば次回に送信する。
大体のパラメーターの説明が終わりました。これからサービスのシナリオの作成を始めます。

# -*-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に関する通信内容は以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。