计算机网络套接字编程作业二:UDP ping 程序

题目要求

  • 客户端输入ping 1-10,服务器端人工模拟UDP的丢包。
  • 如果时间超过1s,则表示该包丢了,显示超时
  • 如果没有丢包,则输出服务器返回的数据,并且输出RTT

服务器代码

这个代码是教程配套网站已经有的。我是从myk502的GitHub下载的。

import random
from socket import *

HOST = ''
PORT = 12001
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)

while True:
    print('wating for connection...')
    data, addr = udpSerSock.recvfrom(BUFSIZE)
    rand = random.randint(0, 10)
    print(rand, addr)
    data = data.upper()
    if rand < 4:                          #人工模拟丢包
        continue
    udpSerSock.sendto(data, addr)

udpSerSock.close()

客户端代码

from socket import *
from time import *
from datetime import *

HOST = '127.0.0.1'
PORT = 12001
BUFSIZE = 1024
ADDR = (HOST, PORT)
TIMEOUT = 1

udpCliSock = socket(AF_INET, SOCK_DGRAM)
udpCliSock.settimeout(TIMEOUT)

for i in range(0, 10):
    data = input('> ')
    if not data:
        break

    try:
        begin_time = datetime.now()
        udpCliSock.sendto(data.encode(), ADDR)
        data, ADDR = udpCliSock.recvfrom(BUFSIZE)
        end_time = datetime.now()
        if data:
            print('Response: ', data)
        time = (end_time - begin_time).microseconds #微秒
        print('RTT: ', time, 'ms')
    except Exception as e:
        print(e)
        #print('Request timed out')

udpCliSock.close()

运行过程

这里写图片描述

参考书籍:《Python核心编程》,《计算机网络》

猜你喜欢

转载自blog.csdn.net/qq_35414878/article/details/80623086