多任务加网络能够实现类似于QQ,飞信的聊天。
就是让接受和发送一直处于线程循环,就可随时随地发送信息和随时随地接受信息。
import socket
import threading
写出基本的操作:
1.创建套接字
2.绑定自身端口
3.输入要连接的ip地址和端口
4.收 发数据
5.开启线程,实现多任务
1.创建套接字
这是udp的套接字(需要用到)
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
附上tcp的套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2.绑定自身端口(目的是让另一个ip地址找到自己,接受信息)
localaddr = ("",7788)
udp_socket.bind(localaddr)
3.输入要连接的ip地址和端口(目的是向另一个ip地址发送信息)
dest_ip = input("请输入对方的ip:")
dest_port = int(input("请输入对方的port:"))
4.收 发数据
udp套接字向指定ip发送数据
udp_socket.sendto(send_data.encode("utf-8"),(dest_ip,dest_port))
udp套接字接受数据
recv_data = udp_socket.recvfrom(1024)
print(recv_data)
5.开启线程,实现多任务
t1 = threading.Thread(target=recv_msg,args=(udp_socket,))
t2 = threading.Thread(target=send_msg,args=(udp_socket,dest_ip,dest_port))
t1.start()
t2.start()
总代码:
import socket
import threading
def recv_msg(udp_socket):
"""接受数据并显示"""
while True:
recv_data = udp_socket.recvfrom(1024)
print(recv_data)
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 main():
"""完成udp聊天器的整体控制"""
# 创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定端口
localaddr = ("",7788)
udp_socket.bind(localaddr)
# 获取对方的ip
dest_ip = input("请输入对方的ip:")
dest_port = int(input("请输入对方的port:"))
#接受数据
#发送数据
# 创建两个线程,去执行相应的功能
t1 = threading.Thread(target=recv_msg,args=(udp_socket,))
t2 = threading.Thread(target=send_msg,args=(udp_socket,dest_ip,dest_port))
t1.start()
t2.start()
if __name__ == '__main__':
main()