请使用python实现一个服务器-客户端程序服务端监听5555的tcp端口当收到客户端发来的握手包后构造一个速率为1000bps且内容为全0的数据流以udp协议向客户端的6666端口持续发送客服端的ip地址由服务器收到的握手包中获取。请实现上面的服务端和客户端
服务端代码:
import socket
SERVER_PORT = 5555
UDP_RATE = 1000
UDP_DATA = b'\x00' * 1024
def main():
# 创建tcp socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', SERVER_PORT))
server_socket.listen()
print('Server started, listening on port', SERVER_PORT)
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print('Client connected:', client_address)
# 接收握手包
handshake_data = client_socket.recv(1024)
print('Received handshake data:', handshake_data)
# 解析握手包获取客户端ip和端口号
client_ip = handshake_data.split(b':')[0]
client_port = int(handshake_data.split(b':')[1])
# 创建udp socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 持续发送数据流
while True:
udp_socket.sendto(UDP_DATA, (client_ip, client_port))
time.sleep(1/UDP_RATE)
if __name__ == '__main__':
main()
客户端代码:
import socket
SERVER_ADDRESS = '127.0.0.1'
SERVER_PORT = 5555
CLIENT_PORT = 6666
HANDSHAKE_DATA = b'Hello server!'
def main():
# 创建tcp socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((SERVER_ADDRESS, SERVER_PORT))
# 发送握手包
client_socket.send(HANDSHAKE_DATA)
# 创建udp socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('0.0.0.0', CLIENT_PORT))
# 接收数据流
while True:
data, server_address = udp_socket.recvfrom(1024)
print('Received data from server:', data)
if __name__ == '__main__':
main()
``
原文地址: https://www.cveoy.top/t/topic/g88E 著作权归作者所有。请勿转载和采集!