Python-Socket(ソケット)

9018 ワード

文書ディレクトリ
  • ネットワーク通信プログラミング
  • Socket
  • 概要
  • Socket
  • とは
  • socket
  • を作成
  • Socketオブジェクト(組み込み)メソッド
  • ネットワーク通信プログラミング
    Socket
    概要
    異なるコンピュータ上のプロセスの識別と識別
    プロセスを一意のIDでマーク
    コンピュータ上では、プロセス番号(PID)でプロセスを一意に識別できます.しかし、ネット上では、できません.TCP/IPプロトコルファミリーを利用して問題を解決する必要があります.
    IPでネットワーク内のホストを一意に識別でき、プロトコル+ポート番号でホストのアプリケーションプロセスを一意に識別できる
    プロセスとは、実行するプログラムおよび実行するプログラムが使用するリソースの全体をプロセスと呼ぶ
    Socketとは
    ソケット(ソケット)はプロセス間通信の一種である
    他のプロセスとの通信の主な違いは、次のとおりです.
    異なるホスト間のプロセス間の通信を実現
    現行のほとんどのサービスはSocketに基づいて通信を完了しています
    例えば:ウェブページをブラウズして、QQチャット、Emailを送受信します
    ソケットの作成
    import socket
    socket.socket(AddressFamily,Type)
    

    パラメータの説明:
  • AddressFamilyアドレスファミリー
  • AF_INET,Internet間プロセス間通信
  • AF_UNIX、同一マシンプロセス間通信
  • Typeソケットタイプ
  • SOCK_DGRAM、データレポートソケット、主にUDPプロトコル
  • に用いられる
  • SOCK_STREAM、ストリームソケット、主にTCPプロトコル
  • に用いられる

    TCPの作成
    import socket
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.close()
    

    単純な例:
    #    
    import socket
    #    socket  
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # print(dir(s))
    
    #       
    host=socket.gethostname()
    #     
    port=9997
    #    ,       
    s.connect((host,port))
    #    1024     
    msg=s.recv(1024)
    s.close()
    print(msg.decode('utf-8'))
    
    #     
    import socket
    
    #     socket  
    serbersocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    #    
    host=socket.gethostname()
    #    
    port=9997
    #     
    serbersocket.bind((host,port))
    #       ,     
    serbersocket.listen(5)
    while True:
        #        
        clientsocket,addr=serbersocket.accept()
        print('    :\t %s'%(str(addr)))
        msg='      。'+'\r
    '
    clientsocket.send(msg.encode('utf-8')) clientsocket.close()

    実行結果
          。
    
        :	 ('192.168.28.1', 50084)('192.168.28.1', 50207)('192.168.28.1', 50208)
    

    Socketオブジェクト(組み込み)メソッド
    関数#カンスウ#
    説明
    サーバ側ソケット
    s.bind()
    バインドアドレス(host,port)をソケットに、AF_INETでは,メタグループ(host,port)としてアドレスを表す.
    s.listen()
    TCPリスニングを開始します.backlogは、接続を拒否する前にオペレーティングシステムが停止できる最大接続数を指定します.この値は少なくとも1で、ほとんどのアプリケーションは5にすればいいです.
    s.accept()
    TCPクライアント接続を受動的に受け入れ、接続の到来を待つ
    クライアントソケット
    s.connect()
    TCPサーバ接続をアクティブに初期化します.一般的にaddressのフォーマットはメタグループ(hostname,port)であり、接続エラーが発生した場合はsocketを返す.エラーエラー.
    s.connect_ex()
    connect()関数の拡張バージョンでは、エラー時にエラーコードを返し、例外を投げ出すのではなく
    共通用途のソケット関数
    s.recv()
    TCPデータを受信し、データは文字列で返され、bufsizeは受信する最大データ量を指定します.flagは、通常無視できるメッセージに関する他の情報を提供します.
    s.send()
    TCPデータを送信し、stringのデータを接続されたソケットに送信します.戻り値は、stringのバイトサイズよりも小さい送信するバイト数です.
    s.sendall()
    TCPデータを完全に送信し、TCPデータを完全に送信します.stringのデータを接続されたソケットに送信しますが、戻る前にすべてのデータを送信しようとします.Noneに正常に戻り、失敗すると例外が放出されます.
    s.recvform()
    UDPデータはrecv()と同様に受信されるが、戻り値は(data,address)である.ここでdataは受信データを含む文字列であり、addressは送信データのソケットアドレスである.
    s.sendto()
    UDPデータを送信し、ソケットにデータを送信します.addressは(ipaddr,port)形式のメタグループで、リモートアドレスを指定します.返される値は、送信されたバイト数です.
    s.close()
    クローズソケット
    s.getpeername()
    接続ソケットのリモートアドレスを返します.戻り値は通常、メタグループ(ipaddr,port)です.
    s.getsockname()
    ソケットの自分のアドレスを返します.通常はメタグループ(ipaddr,port)
    s.setsockopt(level,optname,value)
    指定したソケットオプションの値を設定します.
    s.getsockopt(level,optname[.buflen])
    ソケットオプションの値を返します.
    s.settimeout(timeout)
    ソケット操作のオーバータイムを設定し、timeoutは浮動小数点数であり、単位は秒である.値がNoneの場合は、期間を超えていないことを示します.一般に、接続操作(connect()など)に使用できるため、スーパータイムはソケットを作成したばかりのときに設定する必要があります.
    s.gettimeout()
    現在のタイムアウトの値を秒単位で返し、タイムアウトが設定されていない場合はNoneを返します.
    s.fileno()
    ソケットのファイル記述子を返します.
    s.setblocking(flag)
    flagが0の場合、ソケットを非ブロックモードに設定します.そうでない場合、ソケットをブロックモードに設定します(デフォルト).非ブロックモードでは、呼び出しrecv()がデータを発見していない場合、send()呼び出しが直ちにデータを送信できない場合、socketが発生する.error異常.
    s.makefile()
    ソケットに関連付けられたファイルを作成
    ネットワークデバッグアシスタントを使用すると、ポート番号が常に変更されます.