udp介绍与实现

  1. 什么是 socket
    socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的。例如我们每天浏览网页、QQ 聊天、收发 email 等等

  2. 创建 socket
    有两种socket模式,一种是udp,一种是tcp,tcp将在下一篇博客介绍。这一篇主要介绍UDP。

  3. udp创建流程
    创建客户端套接字
    发送/接收数据
    关闭套接字

  4. 程序实现
    发送消息

import socket

def main():
	
	# 创建UDP套接字
	# 在这里 socket.AF_INET是用于Internet之间通信协议(还有socket.AF_UNIX,用于同一台机器进程间通信)
	# SOCK_STREAM是流式套接字,主要用于 TCP 协议,将会在下一篇讲到,SOCK_DGRAM是用于数据报套接字,主要用于 UDP 协议
	udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

	# 循环发送
	while True:
		# 发送的内容
		send_data = input("请输入要发送的数据:")

		# 退出控制
		if send_data == "exit":
			break

		# 使用套接字发送数据
		# IP和端口打包成元组
		# 需要发送的内容改写成bytes类型
		udp_socket.sendto(send_data.encode("utf-8"),("192.168.11.22",8888))

	# 关闭套接字
	udp_socket.close()

	print("发送结束")


if __name__ == "__main__":
	main()

接受信息

import socket

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

	# 绑定本地地址和端口(必须,如果不绑定那么下次发送过来数据可能因为端口改变而无法接受到)
	localaddr = ("",8888)  # 前面为IP地址可以省略,会自动绑定,端口一定要指定
	udp_socket.bind(localaddr)  # 必须要绑定自己电脑的IP和端口(port),协议要求

	# 接受数据
	# 循环接受
	while True:
		recv_data = udp_socket.recvfrom(1024)

		# 这里收到的数据是一个元组 格式为(数据,(ip,port)),其中ip和port是发送端的ip和port
		recv_msg = recv_data[0]
		send_addr = recv_data[1]

		# 打印接收到的数据
		# 这里需要主要,如果是win系统则需要gbk解码,linux为utf-8,这是不同操作系统编码方式不同
		print("{}:{}".format(str(send_addr),recv_msg.decode("utf-8")))

		# 关闭套接字
	udp_socket.close()

if __name__ == "__main__":
	main()

两个结合输出结果

发送端
tom@ubuntu:~/Desktop/socket$ python3 upd_demo1.py 
请输入要发送的数据:df
请输入要发送的数据:vber
请输入要发送的数据:23333
请输入要发送的数据:dajiahaop
请输入要发送的数据:你是真的皮皮虾

接收端
tom@ubuntu:~/Desktop/socket$ python3 udp_recv.py 
('192.168.137.137', 46680):df
('192.168.137.137', 46680):vber
('192.168.137.137', 46680):23333
('192.168.137.137', 46680):dajiahaop
('192.168.137.137', 46680):你是真的皮皮虾


读者在用我的程序做demo时要注意两个地方,第一,IP地址要和你的符合,第二,有时你的端口(port)会被占用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值