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("\n>>%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和端口信息
  • 启动两个线程,一个线程用于发送数据,一个线程用于接收数据

猜你喜欢

转载自www.cnblogs.com/zhangfengxian/p/python-chat-threading.html