• python网络聊天器多线程版


    在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器。

    说明:

    • 编写一个有2个线程的程序
    • 线程1用来接收数据然后显示
    • 线程2用来检测键盘数据然后通过udp发送数据

    要求:

    1. 实现上述要求
    2. 总结多任务程序的特点

    示例程序:

    import socket
    import threading
    
    
    def send_msg(udp_socket, dest_ip, dest_port):
            """发送消息"""
    
            while True:
                    send_data = input("请输入要发送的信息:")
    
                    udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
    
    
    def recv_msg(udp_socket):
            """接收消息"""
    
            while True:
                    recv_data = udp_socket.recvfrom(1024)
                    recv_ip = recv_data[1]
                    recv_msg = recv_data[0].decode("utf-8")
                    print("
    >>%s:%s" % (recv_ip, recv_msg))
    
    def main():
    
            # 创建套接字
            udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
            # 绑定本地端口
            udp_socket.bind(("", 8888))
    
            # 输入对方的ip和地址
            dest_ip  = input("请输入对方的ip:")
            dest_port = int(input("请输入对方的port:"))
    
    
            t1 = threading.Thread(target=send_msg, args=(udp_socket, dest_ip, dest_port))
            t1.start()
    
            t2 = threading.Thread(target=recv_msg, args=(udp_socket,))
            t2.start()
    
    
    if __name__ == "__main__":
            main()
    
    

    终端运行结果:

    $ python3 聊天器-多线程版.py 
    请输入对方的ip:192.168.92.130
    请输入对方的port:8080
    请输入要发送的信息:hello
    请输入要发送的信息:
    >>('192.168.92.130', 8080):666
    

    网络调试助手的结果:

    程序运行过程解析:

    • 首先创建套接字,并绑定到本地的端口8888
    • 输入要进行聊天的对方的ip和端口信息
    • 启动两个线程,一个线程用于发送数据,一个线程用于接收数据
  • 相关阅读:
    springboot + driud连接池踩的坑____新手学习
    tomcat的安装
    无限极分类
    javascript ECMAscript 和node.js commonJs之间的关系
    变量名,引用和地址
    java中闭包的理解
    thinkphp 模型的curd
    thinkphp之migration 迁移文件的使用
    验证ArrayList是线程不安全的集合
    一个java小程序,盗取插入的U盘中的数据。
  • 原文地址:https://www.cnblogs.com/zhangfengxian/p/python-chat-threading.html
Copyright © 2020-2023  润新知