需求:同时收发数据,即需要做到全双工通信,socket本身就是全双工的,所以可以实现这样的操作
说明:
- 在一个电脑中编写一个程序,有两个功能(接收数据、发送数据)
- 获取键盘数据,并将其发送给对方
- 接收数据并显示
import time
import threading
import socket
def sendMsg(udp_socket, dest_ip, dest_port):
# 发送数据
while True:
send_data = input("请输入要发送的数据:")
udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
def recvMsg(udp_socket):
"""接收数据并显示"""
# 接收数据
while True:
recv_data = udp_socket.recvfrom(1024)
print(recv_data)
def main():
"""完成udp聊天室的整体控制"""
#1、创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#2、绑定本地信息
udp_socket.bind(("", 8801))
#3、获取对方的ip
dest_ip = input("请输入对方的ip:")
dest_port = input("请输入对方的port:")
#4、创建两个线程去执行相应的功能
t_recv = threading.Thread(target=recvMsg, args=(udp_socket,))
t_send = threading.Thread(target=sendMsg, args=(udp_socket, dest_ip, dest_port))
t_recv.start()
t_send.start()
return None
if __name__ == '__main__':
main()