请使用python实现一个服务器-客户端程序服务端监听5555的tcp端口当收到客户端发来的握手包后构造一个速率为1000bps且内容为全0的数据流以udp协议向客户端的6666端口持续发送客服端的ip地址由服务器收到的握手包中获取。客户端每秒统计接收到的数据速率并打印出来然后丢弃接收到的的数据包请实现上面的服务端和客户端
服务端代码:
import socket
def main():
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server_socket.bind(('127.0.0.1', 5555))
# 开始监听
server_socket.listen(128)
print('服务端已启动,等待客户端连接...')
while True:
# 接收客户端连接
client_socket, client_address = server_socket.accept()
print('客户端已连接,地址为:', client_address)
# 接收握手包
data = client_socket.recv(1024)
print('接收到握手包:', data.decode())
ip_addr = data.decode().split(':')[1]
# 构造数据流
data_stream = b'\x00' * 1000
# 创建UDP socket对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 持续向客户端发送数据流
while True:
udp_socket.sendto(data_stream, (ip_addr, 6666))
if __name__ == '__main__':
main()
客户端代码:
import socket
import time
def main():
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect(('127.0.0.1', 5555))
print('连接服务器成功')
# 发送握手包
client_socket.send('hello:127.0.0.1'.encode())
# 创建UDP socket对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口号
udp_socket.bind(('127.0.0.1', 6666))
# 统计接收到的数据包数量和时间
data_count = 0
start_time = time.time()
while True:
# 接收数据包
data, address = udp_socket.recvfrom(1024)
data_count += 1
# 每秒打印接收速率
end_time = time.time()
if end_time - start_time >= 1:
receive_speed = data_count * 1000 / (end_time - start_time) / 1024
print('接收速率:%.2f KB/s' % receive_speed)
data_count = 0
start_time = end_time
# 丢弃数据包
pass
if __name__ == '__main__':
main()
``
原文地址: https://www.cveoy.top/t/topic/g89e 著作权归作者所有。请勿转载和采集!