udp聊天器(客户端-多任务版)

思路: 聊天器,我们利用socket发送和接受数据
注意点: 不能只说一句话;(死循环:1发送数据 2.退出)

import socket
import threading

# 封装接收
def recv_msg(udp_socket):
    while True:
        # 发送完毕数据以后要接收数据
        str3, ip_port3 = udp_socket.recvfrom(1024)
        print(ip_port3, ": " + str3.decode('utf-8'))


if __name__ == '__main__':
    # 1.创建套接字(无论多少个循环,都需要一个套接字)
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # windows下,在接收数据之前必须,设置端口
    udp_socket.bind(("", 9999))

    # 重新开辟一个子线程,用多任务的形式用于同时发送和接收数据,而且不限制次数
    t1 = threading.Thread(target=recv_msg, args=(udp_socket,))
    # 设置为守护主线程,先发送数据再接收数据。程序会先进入发送数据while循环。当发送数据while结束的时候,t1也结束。
    t1.setDaemon(True)
    t1.start()

    # 2.死循环:1发送数据  2.退出(退出的时候t1线程也会结束)
    while True:
        str1 = input('请输入功能编号: 1发送数据  2退出  :')
        # 判断:
        if str1 == "1":
            # 发送数据:
            str_ip = input('请输入对方的ip: ')
            str_port = input('请输入对方的端口: ')
            str2 = input('请输入想要发送给对方的数据: ')
            ip_port2 = (str_ip, int(str_port)) # ip是字符串,端口是数值;(包含在一个元祖中)
            udp_socket.sendto(str2.encode('utf-8'), ip_port2)

        elif str1 == "2":
            break

    # 3.关闭套接字
    udp_socket.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值