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 を閉じる
受信者: socket を作成 ipとport をバインド受信データ プリントアウトデータ socket を閉じる
上記の2つの例は、同時にrun、1つは情報を循環的に受信することができ、1つは情報を循環的に送信ことができる.
以下は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()
クローズソケット
一般的な手順は次のとおりです.
送信者:
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()
受信者:
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つは情報を循環的に送信ことができる.