python 3:udp-socketの使い方

2080 ワード

SOcketは標準的なBSD Socket APIを提供しています
以下はsocketで定義された一般的な定数です.
ソケットタイプ
説明
socket.AF_INET
サーバとサーバ間のネットワーク通信
socket.SOCK_STREAM
TCPベースのストリーミングソケット通信
socket.SOCK_DGRAM
UDPベースのデータグラム通信
一般的な関数:
Socket関数
説明
s.bind(address)
ソケットをアドレスにバインドし、AF_であればINETでは、s.bind('192.168.1.1',8080)のようなグループなしで入力される.
s.recvfrom(bufsize[, flag])
UDPソケットのデータを受け取り,戻り値はメタグループtuple(data,addr)である.ここでdataは受信データを含む文字列であり、addressは送信データのソケットアドレスである
s.sendto(string[, flag], address)
UDPデータを送信し、ソケットにデータを送信し、address形式はtuple(ipaddr,port)であり、リモートアドレス送信を指定し、戻り値は送信バイト数である
s.close()
クローズソケット
一般的な手順は次のとおりです.
送信者:
  • socket
  • を作成
  • data
  • を送信
  • socket
  • を閉じる
    import socket
    
    
    def send_msg():
        # 1.   udp socket
        udp_socket_send = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
        while True:
            # 1.1         
            send_data = input('         :')
            if send_data == 'exit':
                break
    
            # 2.   data
            udp_socket_send.sendto(send_data.encode('utf-8'), ('192.168.31.187', 6666))
    
        # 3.   udp_socket
        udp_socket_send.close()
    
    
    def main():
        send_msg()
    
    
    if __name__ == '__main__':
        main()

    受信者:
  • socket
  • を作成
  • ipとport
  • をバインド
  • 受信データ
  • プリントアウトデータ
  • socket
  • を閉じる
    import socket
    
    
    def recv_msg():
        # 1.      
        udp_socket_recv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
        # 2. bind ip port
        ip_port = ('', 6666)
        udp_socket_recv.bind(ip_port)
    
        while True:
            # 3.   msg,recvfrom()        ,[0] msg, [1]        (ip, port)
            #       msg=tuple[0]   bytes  ,       decode .
            msg, addr = udp_socket_recv.recvfrom(1024)
            # 4.      msg
            print(f'    {str(addr)}   :{msg.decode("utf-8")}')
    
        # 5.      
        udp_socket.close()
    
    
    def main():
        recv_msg()
    
    
    if __name__ == '__main__':
        main()

    上記の2つの例は、同時にrun、1つは情報を循環的に受信することができ、1つは情報を循環的に送信ことができる.