当前位置: 移动技术网 > IT编程>脚本编程>Python > 网络通信与服务器之网络-udp通讯方式

网络通信与服务器之网络-udp通讯方式

2020年09月29日  | 移动技术网IT编程  | 我要评论
01-socket的基本使用import socketdef main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 可以使用套接字收发数据 # udp_socket.sendto("hahahah", 对方的ip以及port) udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8

概念介绍

网络中重要概念:

网络通信方式有两种方式:udp, tcp
手机连的3G4G得ip是全世界唯一得,是公有ip,在家通过路由器间接上的网,分得ip, 连的是私有IP.
ip在网络上来标记一台电脑,port标记一个程序
一个ip在一个网络里不可以相同,一个port在一个电脑里,不可以相同
同一个端口,同一个时刻,不允许使用两次,也就是不会给两个程序分配同一个端口号;一个程序对应分配一个端口号

udp通信模型

udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中“写信”。(udp几乎不用)如下图所示:
在这里插入图片描述

代码示例讲解

01-socket的基本使用

import socket def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 可以使用套接字收发数据 # udp_socket.sendto("hahahah", 对方的ip以及port) udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080)) # 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

02-发送任意数据给windows中调试助手

import socket def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 从键盘获取数据 send_data = input("请输入要发送的数据:") # 可以使用套接字收发数据 # udp_socket.sendto("hahahah", 对方的ip以及port) # udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080)) udp_socket.sendto(send_data.encode("utf-8"), ("192.168.33.53", 8080)) # 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

03-循环发送数据

import socket def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: # 从键盘获取数据 send_data = input("请输入要发送的数据:") # 可以使用套接字收发数据 # udp_socket.sendto("hahahah", 对方的ip以及port) # udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080)) udp_socket.sendto(send_data.encode("utf-8"), ("192.168.33.53", 8080)) # 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

04-带有退出功能的循环发送

import socket def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: # 从键盘获取数据 send_data = input("请输入要发送的数据:") # 如果输入的数据是exit,那么就退出程序 if send_data == "exit": break # 可以使用套接字收发数据 # udp_socket.sendto("hahahah", 对方的ip以及port) # udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080)) udp_socket.sendto(send_data.encode("utf-8"), ("192.168.33.53", 8080)) # 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

05-绑定端口用来接收数据

import socket def main(): # 1. 创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2. 绑定一个本地信息,如果一个网络程序不绑定,则系统会随机分配 localaddr = ("", 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip udp_socket.bind(localaddr) # 3. 接收数据 recv_data = udp_socket.recvfrom(1024) # 4. 打印接收到的数据 print(recv_data) # 5. 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

06-解析出接收到的数据

import socket def main(): # 1. 创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2. 绑定一个本地信息 localaddr = ("", 7788) udp_socket.bind(localaddr) # 必须绑定自己电脑的ip以及port,其他的不行 # 3. 接收数据 recv_data = udp_socket.recvfrom(1024) # recv_data这个变量中存储的是一个元组(接收到的数据,(发送方的ip, port)) recv_msg = recv_data[0] # 存储接收的数据 send_addr = recv_data[1] # 存储发送方的地址信息 # 4. 打印接收到的数据 # print(recv_data) # print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8"))) print("%s:%s" % (str(send_addr), recv_msg.decode("gbk"))) # 5. 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

07-循环接收并显示数据

import socket def main(): # 1. 创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2. 绑定一个本地信息 localaddr = ("", 7788) udp_socket.bind(localaddr) # 必须绑定自己电脑的ip以及port,其他的不行 # 3. 接收数据 while True: recv_data = udp_socket.recvfrom(1024) # recv_data这个变量中存储的是一个元组(接收到的数据,(发送方的ip, port)) recv_msg = recv_data[0] # 存储接收的数据 send_addr = recv_data[1] # 存储发送方的地址信息 # 4. 打印接收到的数据 # print(recv_data) # print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8"))) print("%s:%s" % (str(send_addr), recv_msg.decode("gbk"))) # 5. 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

08-先绑定端口然后在循环发送

import socket def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定本地信息 udp_socket.bind(("", 7890)) while True: # 从键盘获取数据 send_data = input("请输入要发送的数据:") # 可以使用套接字收发数据 # udp_socket.sendto("hahahah", 对方的ip以及port) # udp_socket.sendto(b"hahahah------1----", ("192.168.33.53", 8080)) udp_socket.sendto(send_data.encode("utf-8"), ("192.168.33.53", 8080)) # 关闭套接字 udp_socket.close() if __name__ == "__main__": main() 

本文地址:https://blog.csdn.net/SMF0504/article/details/108872846

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网