计算机网络(自顶向下方法)学习记录---2.7 UDP的Ping编程


前言

提示:这是本书第二个实验关于UDP:

关于UDP对服务器进行ping操作计算时延和丢包率。


一、UDP客户编程

代码如下:

from socket import *
import time
serveName = "服务器ip地址或者是另外一台主机名或者ip地址"
servePort = 48000
clientSocket = socket(AF_INET, SOCK_DGRAM)  # 创建UDP套接字
clientSocket.settimeout(5)  # 设置套接字超时值为5秒
messageLen = 10  # 设置发送报文数
loseMessage = 0    # 丢包数
sumTime = 0  # 总时间

for i in range(messageLen):
    now = time.time()
    print("Ping %d %s" % (i, now))
    message = ('Ping %d %s' % (i, now)).encode()    #设置发送报文(0-9的数字共10个)
    try:
        clientSocket.sendto(message, (serveName, servePort))  # 将信息发送到服务器
        modifiedMessage, serverAddress = clientSocket.recvfrom(2048)  # 从服务器接收信息,同时也能得到服务器地址
        TTL = time.time() - now  # 计算往返时间
        sumTime += TTL
        print("the modifiedMessage is :%s"% modifiedMessage)
    except Exception as e:#接受异常即为丢包时
        notRecTime = time.time() - now
        loseMessage = loseMessage + 1
        sumTime = sumTime + notRecTime
        print("not rec the %d message" % i)
print("\nThe End Report the avgRTT is %d:" % (sumTime/messageLen))
print("\nThe packet loss percent is %.2f%% and the packet loss number is:%d" % ((loseMessage/messageLen)*100, loseMessage))
clientSocket.close()

这里书中要求UDP超时值设置为1s,但是我在服务器编程上有一个返回的信息,如果超时值设置为1s,则会影响其他所有的ping报文,我很想把返回的modified打印出来看看,所以我这里设置了超时值为5,如果不想打印出服务器返回的值则可以把print(“the modifiedMessage is :%s”% modifiedMessage)这一行去掉(具体为第20行)。

二、UDP服务器编程

代码如下(示例):

import random
from socket import *
serverPort = 48000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print("This server is already")
while True:
    rand = random.randint(0, 10)
    message, clientAddress = serverSocket.recvfrom(2048)
    if rand < 4:
        continue
    modifiedMessage = 'I accept your message: ' + message.decode()
    serverSocket.sendto(modifiedMessage.encode(), clientAddress)

具体UDP服务端的解释在我之前的文章中已经有提到过啦:https://blog.csdn.net/DanLimx/article/details/124985853

三、结果显示

在这里插入图片描述


总结

UDP连接按理来说不用先运行服务器端的程序,但是在我尝试过后,会出错,可能是因为设置了try,所有的都跑到异常那里去了,虽然只是一个小的很浅显的实验,但是深入理解UDP已经足够了,这里来回产生的时延非常小,也可能因为我是一台电脑运行的两个程序,如果想要看明显一点的,可以尝试把服务器端的编码放到自己的服务器上运行,本地再使用客户端的程序运行。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计网菜包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值