前提・実現したいこと
UDP通信を用いていくつかの送信に対し応答を変化させたいです.
実現したいこととしては,送信側で data をいくつか用意しランダムで送信→受信側で受信した data によってprintの内容を変えられるようにしたいです.
現在プログラミングに学んでいる最中でエラーメッセージを検索したりしましたが解決できなかったので質問させていただきました.
発生している問題・エラーメッセージ
エラーメッセージ
Traceback (most recent call last):
File "udp1.py", line 29, in <module>
udp.send() # 関数実行
File "udp1.py", line 24, in send
data = data.encode('utf-8') # バイナリに変換
AttributeError: 'set' object has no attribute 'encode'
該当のソースコード
python ソースコード # -*- coding: utf-8 -*- from socket import * import random ## UDP送信クラス class udpsend(): def __init__(self): SrcIP = "127.0.0.1" # 送信元IP SrcPort = 11111 # 送信元ポート番号 self.SrcAddr = (SrcIP,SrcPort) # アドレスをtupleに格納 DstIP = "127.0.0.1" # 宛先IP DstPort = 22222 # 宛先ポート番号 self.DstAddr = (DstIP,DstPort) # アドレスをtupleに格納 self.udpClntSock = socket(AF_INET, SOCK_DGRAM) # ソケット作成 self.udpClntSock.bind(self.SrcAddr) # 送信元アドレスでバインド def send(self): data = {"Hello", "bye"} data = data.encode('utf-8') # バイナリに変換 self.udpClntSock.sendto(random.choice(data), self.DstAddr) # 宛先アドレスに送信 udp = udpsend() # クラス呼び出し udp.send() # 関数実行 ここまでが送信側です. # -*- coding: utf-8 -*- from socket import * ## UDP受信クラス class udprecv(): def __init__(self): SrcIP = "127.0.0.1" # 受信元IP SrcPort = 22222 # 受信元ポート番号 self.SrcAddr = (SrcIP, SrcPort) # アドレスをtupleに格納 self.BUFSIZE = 2048 # バッファサイズ指定 self.udpServSock = socket(AF_INET, SOCK_DGRAM) # ソケット作成 self.udpServSock.bind(self.SrcAddr) # 受信元アドレスでバインド def recv(self): while True: # 常に受信待ち data, addr = self.udpServSock.recvfrom(self.BUFSIZE) # 受信 if data == "Hello": print("こんにちは") # 受信データと送信アドレス表示 elif data == "bye": print("さようなら") udp = udprecv() # クラス呼び出し udp.recv() # 関数実行 ここまでが受信側です.
試したこと
送信側でudp.send("Hello")
udp.send("bye")に変更したが受信側ではこんにちはとさようならの両方とも表示されてしまいました.
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー