欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2021-12-29 11:53:43
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几乎不用)如下图所示:
网络通信与服务器之网络-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