思路: 聊天器,我们利用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()