サーバーソケットで生成されたランド数が4未満の場合、クライアントソケットはデータの受信を中断します。クライアントソケットが「タイムアウト」であることを検出できるようにタイムアウトメカニズムを設定する必要があり、メッセージの送信を続行します。サーバー ソケットを実行してからクライアント ソケットを実行すると、次のようなエラー メッセージが表示されます。
Traceback (most recent call last):
File "E:\Studying\Python workspace\Client\src\Client.py", line 34, in <module>
data , addr = client.recvfrom(1024)
socket.timeout: timed out
サーバーソケット:
import random
from socket import *
serverSocket = socket(AF_INET , SOCK_DGRAM)
serverSocket.bind(('', 15000))
while True:
rand = random.randint(0, 10)
message , address = serverSocket.recvfrom (1024)
message = message.upper()
print("received message: ", message)
print("echo to address: ", address)
print(rand)
if rand < 4:
continue
print("Sending message: ", message)
serverSocket.sendto(message, address)
クライアントソケット
import socket
UDP_IP = "127.0.0.1"
RPORT = 15000
MESSAGE = "ping"
print("UDP target IP: ", UDP_IP)
print("UDP target port: ", RPORT)
print("message going to send: ", MESSAGE)
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
i=1
while True:
try:
if(i<11):
client.sendto(MESSAGE.encode('utf_8'),(UDP_IP, RPORT))
print("sending message: ", MESSAGE)
print(i)
i=i+1
client.settimeout(2)
data , addr = client.recvfrom(1024)
print("received echo: ", data)
print("received at: " , addr )
finally:
print("closing socket")
client.close()