📌  相关文章
📜  教资会网络 | UGC NET CS 2016 年 8 月 – III |问题 6(1)

📅  最后修改于: 2023-12-03 15:26:04.124000             🧑  作者: Mango

教资会网络 | UGC NET CS 2016 年 8 月 – III | 问题 6

这是一道考题,考查了应试者对计算机网络的理解和对网络协议的掌握,对应的知识点为 TCP 和 UDP 协议。

要求

需要编写一个程序,使用 TCP 和 UDP 协议实现一个简单的客户端-服务器通信模型,具体要求如下:

  1. 使用 TCP 协议实现客户端从服务器上获取当前时间的功能,客户端只需要发送一个请求,服务器将当前时间作为响应返回给客户端。
  2. 使用 UDP 协议实现客户端给服务器发送一条消息,服务器将该消息完整地返回给客户端。

要求程序代码片段需按 markdown 格式标明。

解答
TCP 协议实现的服务器和客户端

服务器端

import socket
import time

# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置主机地址和端口号
host = socket.gethostname()
port = 9999

# 绑定端口号
server_socket.bind((host, port))

# 监听客户端连接
server_socket.listen(5)

while True:
    # 接受客户端连接
    client_socket, addr = server_socket.accept()

    # 获取当前时间
    current_time = time.ctime(time.time())

    # 将当前时间发送给客户端
    client_socket.send(current_time.encode('utf-8'))

    # 关闭客户端连接
    client_socket.close()

客户端

import socket

# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 设置主机地址和端口号
host = socket.gethostname()
port = 9999

# 连接服务器
client_socket.connect((host, port))

# 发送请求
client_socket.send('time'.encode('utf-8'))

# 接受响应
response = client_socket.recv(1024).decode('utf-8')

# 输出当前时间
print(f"Current time: {response}")

# 关闭客户端连接
client_socket.close()
UDP 协议实现的服务器和客户端

服务器端

import socket

# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 设置主机地址和端口号
host = socket.gethostname()
port = 9999

# 绑定端口号
server_socket.bind((host, port))

while True:
    # 接受客户端消息
    message, client_address = server_socket.recvfrom(1024)

    # 将消息发送给客户端
    server_socket.sendto(message, client_address)

客户端

import socket

# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 设置主机地址和端口号
host = socket.gethostname()
port = 9999

# 发送消息
client_socket.sendto('Hello, world!'.encode('utf-8'), (host, port))

# 接受响应
response, server_address = client_socket.recvfrom(1024)

# 输出响应
print(response.decode('utf-8'))

# 关闭客户端连接
client_socket.close()