一:socket介绍:进程之间通信的一种方式:
创建流程:
1:创建套接字
2:使用socket套接字收发数据:
3:关闭套接字

二:使用UDP循环发送数据

案例:利用Ubuntu发送数据给Windows

import socket

def main():
	# 创建套接字
	udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	
	# 使用套接字收发数据,必须是字节类型
	udp_socket.sendto(b"hahahhaha",('192.168.42.123', 8080))
	
	# 关闭套接字
	udp_socket.close()

if __name__ == "__main__":
	main()	

黑马网络编程---UDP_桥接模式

注意:
1:socket.AF_INET,表示是IPv4,socket.SOCK_DGRAM,表示UDP进行通信。
2:注意在模拟的时候,必须Ubuntu设置成桥接模式,然后查看Ubuntu的IP地址,网络调试助手选择和Ubuntu同一网段的网络(前三个IP地址相同)。
案例:循环发送数据

import socket

def main():
	# 创建套接字
	udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	
	while True:
	
		#从键盘中发送数据
		send_data = input("请输入您要发送的数据:")
		if send_data == "exit":
			break
		# 使用套接字收发数据,必须是字节类型
		udp_socket.sendto(send_data.encode("utf-8"),('192.168.42.123', 8080))
		
	# 关闭套接字
	udp_socket.close()


if __name__ == "__main__":
	main()

黑马网络编程---UDP_数据_02
三:使用UDP接收数据:
流程:
1:创建套接字:
2:绑定本地信息
3:等待对方发送数据
4:显示接收到的数据
5:关闭套接字
我的Ubuntu的IP地址是:192.168.42.73
案例:

import socket

def main():
	# 创建套接字
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

	# 绑定本地信息
	localaddr = ("192.168.42.73", 7788)
	udp_socket.bind(localaddr)

	#等待对方发送数据
	recv_data = udp_socket.recvfrom(1024)
	recv_msg = recv_data[0]
	send_addr = recv_data[1]
	
	# 显示接收到的数据
	print("%s:%s" % (str(send_addr),recv_msg.decode("gbk")))

    #关闭套接字
    udp_socket.close()

if __name__ == "__main__":
	main()

黑马网络编程---UDP_ubuntu_03
黑马网络编程---UDP_ubuntu_04
注意:
1:recvfrom(1024) :1024表示接收数据最大值。
2:因为发送数据是前面数据,后面是绑定的信息,所以要分别取出。
3:为什么要用“gbk”解密?
因为发送方是以gbk的方式加密的,所有接收方Ubuntu要用gbk方式解密。

四:上面循环发送存在的问题:
因为上面发送信息的时候没有绑定端口,所以在运行01-socket.py的时候,第一次运行的结果会在一行显示,第二次运行,又在另外一行显示。因为发送时没有绑定端口,所以系统自动分配端口(1024~65535)。我们只需要在循环前绑定端口就可以了。

import socket

def main():
	# 创建套接字
	udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	# 绑定本地端口
	udp_socket.bind("192.168.42.73", 7788)
	while True:
	
		#从键盘中发送数据
		send_data = input("请输入您要发送的数据:")
		if send_data == "exit":
			break
		# 使用套接字收发数据,必须是字节类型
		udp_socket.sendto(send_data.encode("utf-8"),('192.168.42.123', 8080))
		
	# 关闭套接字
	udp_socket.close()


if __name__ == "__main__":
	main()