Python UDP Pinger分配
我一直在尝试用python编写UDP客户机/服务器(如下图所示)。 代码工作并运行。但是,我相信这条线路有问题:Python UDP Pinger分配,python,networking,server,udp,Python,Networking,Server,Udp,我一直在尝试用python编写UDP客户机/服务器(如下图所示)。 代码工作并运行。但是,我相信这条线路有问题: try: data, server = client_socket.recvfrom(1024) **# THIS LINE** end = time.time() elapsed = end - start print(f'{data} {pings} {elapsed}') 当我运行代码时,它会打印出计数
try:
data, server = client_socket.recvfrom(1024) **# THIS LINE**
end = time.time()
elapsed = end - start
print(f'{data} {pings} {elapsed}')
当我运行代码时,它会打印出计数器、当前时间和“请求超时”十次。我不知道为什么!我做了很多研究,尝试了其他人的代码,但没有一个是有效的!请帮忙
服务器:
import random
from socket import *
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', 12000))
while True:
rand = random.randint(0, 10)
message, address = serverSocket.recvfrom(1024)
message = message.upper()
if rand < 4:
continue
serverSocket.sendto(message, address)
您知道端口1024是一个保留端口吗?分组的开始和结束端口是保留的,不允许使用。您可以检查上的端口,以及各种RFCsPort 1024未被使用。recvfrom()参数指定缓冲区大小。端口(本例中为12000)分别在服务器和客户端的bind()和sendto()调用中指定。@k.le在执行客户端之前,服务器是否正在运行?你在用蟒蛇3吗?您是否试图模拟数据包丢失(即“if rand<4”语句)?
import time
import socket
count = 0
for pings in range(10):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_socket.settimeout(1.0)
message = b'test'
address = ("127.0.0.1", 12000)
start = time.time()
client_socket.sendto(message, address)
count = count +1
print(count, "\n", "current time: ", start)
try:
data, server = client_socket.recvfrom(1024)
end = time.time()
elapsed = end - start
print(f'{data} {pings} {elapsed}')
except socket.timeout:
print('REQUEST TIMED OUT')