Charla UDP_simulación de situación simplex

Efecto de ejecución del cliente

Al escribir n, ejecutar como cliente
Inserte la descripción de la imagen aquí

Efecto de operación del servidor

Entrada y, ejecutar como servidor
Inserte la descripción de la imagen aquí

Código


import socket


class UdpChat(object):
    """UDP聊天器, 单工模拟"""
    def __init__(self, is_server=True, ip="127.0.0.1", port=8088):
        # 是否为服务端
        self.is_server = is_server
        # 要发送消息的目标地址
        self.destination_address = (ip, port)
        # 创建udp套接字
        self.udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # 绑定地址信息
        bind_address = (ip, port)
        # 当作为服务端运行时, 绑定
        if self.is_server:
            # 绑定ip和端口
            self.udp_socket.bind(bind_address)

    def send_message(self):
        """发送信息"""
        # 要发送的字符串信息
        send_str = input("请输入要发送的信息:")
        # utf-8编码
        send_byte = send_str.encode("utf-8")
        # 发送udp信息
        self.udp_socket.sendto(send_byte, self.destination_address)

    def receive_message(self):
        """接收消息"""
        # 接收udp信息, 接收1024字节
        receive_data = self.udp_socket.recvfrom(1024)
        # 发送方的ip地址
        ip_address = receive_data[1][0]
        # 发送方的端口
        port = receive_data[1][1]
        # 信息经过utf-8解码
        receive_str = receive_data[0].decode("utf-8")
        # 返回发送方的地址信息和接收到的信息
        return ip_address, port, receive_str

    def run(self):
        """整体控制运行"""
        # 当作为服务端运行时
        if self.is_server:
            print("正在等待接收数据......")
            # 接收消息
            ip_address, port, receive_str = self.receive_message()
            # 打印发送方的地址信息和接收到的信息
            print("接收到来自[{}:{}]发送的信息: 【{}】".format(ip_address, port, receive_str))
        # 客户端运行时
        else:
            # 发送信息
            self.send_message()


def main():
    """主函数"""
    # 接收输入, 并去除左右空格
    is_server = input("是否作为服务端运行? [y/n]:").strip()
    while True:
        # 当输入y时
        if is_server.upper() == "Y":
            # 作为服务端运行
            UdpChat().run()
        elif is_server.upper() == "N":
            # 作为客户端运行
            UdpChat(is_server=False).run()
        else:
            print("输入信息有误")
            exit()


if __name__ == '__main__':
    main()

Supongo que te gusta

Origin blog.csdn.net/u010684603/article/details/107775065
Recomendado
Clasificación