一、网络编程-UDP传输协议及socket套接字使用
知识点基本介绍:1、网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP
2、ip:ip就是标记网络中中的一台电脑,目前我们使用的都是ipv4,在公网中,每台电脑都有一个唯一的IP地址,目前ipv4已经被分配完了,大家在ipconfig的时候见过ipv6,它能给更多的电脑分配IP地址,号称给地球上每一粒沙子都分配一个地址都用不完,目前是用不到的,因为网络运营商搭建网络时配置都配好了,不可能重新去换ipv6.
3、端口:日常中,我们发送一条消息给另一台电脑上的程序,是怎么运作的呢?先是根据ip找到那台电脑,但是我要发给那个程序呢?所以也要给每个电脑绑定一个标识,这个标识就是端口
1、如何使用UDP协议发送消息给另外一个程序?这就要使用编程中socket套接字,它是开发网络编程一个接口,调用其中封装的方法就可以实现发送消息。既然发送给另外一个程序,那么这里需要用到一个小工具,网络调试助手,如图:
下面使用socket给助手发消息,代码如下,方法使用详情看注解:
import socket # 发送消息给另外一个程序
def send_main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建套接字需要传递俩个参数,第一个参数是ip地址类型,第二个参数是传输协议
# 我这里AF_INET代表ipv4,SOCK_DGRAM代表udp协议 udp_socket.bind(('', 7789)) # 参数传递的是元祖。第一个值是ip,因为绑定的是本地的,所以可以不写,第二个值是端口。将套接字绑定地址和端口,作用就是当我使用这个套接字发送消息时,接受方看到的端口一直就是绑定的这个端口。
# 不绑定也没关系,去掉这句代码后,发送消息时,会自动为该程序绑定一个随机端口,那么每次启动程序去发消息时,对方看到都是不一样的端口 while True: # 让程序一直停留在发送数据界面
# 发送数据
# udp_socket.sendto(b'hihihi', ('192.168.2.151',8080)) # 调用sendto方法发送数据,接受的第一参数值是发送的内容,第二个参数是一个元祖
# 元祖里第一个值是接受方的ip地址,第二个值是接收方程序的端口号
# 注意,发送内容前加一个b代表以字节的格式发送出去 # 改进:发送内容为用户输入的,不要写死
input_data = input('请输入数据:')
udp_socket.sendto(input_data.encode('utf-8'), ('192.168.2.151', 8080)) # 这里将用户输入的内容要做一个编码,否则发不出去
# 关闭套接字
udp_socket.close()
if __name__ == '__main__':
send_main()
发送消息演示图如下:
2、接收消息:
def receive_main():
# 创建套接字
udp_socket1 = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udp_socket1.bind(('', 7489)) # 绑定地址和端口,注意,上面发送消息时可以不绑定,但是接受方一定要绑定,否则发送方怎么知道要发给哪个ip的哪个程序
udp_data = udp_socket1.recvfrom(1024) # 调用revfrom方法接受数据,参数是收到的内容最大值 # print(udp_data) # 打印出接收到的数据,(b'\xb9\xfe\xb9\xfe\xb9\xfe', ('192.168.2.151', 8080)),数据是一个元祖,
# 第一个值时接收到的内容,第二个值也是一个元祖,里面是发送发的ip和端口
# 内容是一串乱码,这是因为作为发送方的网络调试助手使用Windows中gbk编码发送的,所以解码一下就好了 print(udp_data[0].decode('gbk')) # 我只打印内容,地址不打印 udp_socket1.close() # 关闭套接字 if __name__ == '__main__':
receive_main()
接收消息演示图如下:
下一章讲TCP协议,敬请期待。。。。。。。
一、网络编程-UDP传输协议及socket套接字使用的更多相关文章
- ~~网络编程(四):socket套接字~~
进击のpython ***** 网络编程--socket socket的中文意思叫做套接字,socket方法其实也叫套接字方法 我们研究过TCP/UDP协议,但是要是让我们自己搭建,就十分困难了 而这 ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- 【Java】Java网络编程菜鸟进阶:TCP和套接字入门
Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...
- 【UNIX网络编程(四)】TCP套接字编程具体分析
引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...
- Python 31 TCP协议 、socket套接字
1.TCP协议 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割. (1)三次握手建链接( ...
- 传输模型, tcp socket套接字
osi七层模型 tcp/ip四层模型 socket套接字 tcp 协议是可靠的 包括 三次握手 四次挥手 import socket # server server = socket.socket( ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- 基于UDP协议的socket套接字编程
目录 一.UDP套接字简单示例 1.1 服务端 二.客户端 三.UPD套接字无粘包问题 3.1 服务端 3.2 客户端 四.qq聊天 4.1 服务端 4.2 客户端1 4.3 客户端2 4.4 运行结 ...
- 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信
TCP协议 面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端: 客户端 实例化对 ...
随机推荐
- android经典源码,很不错的开源框架
高仿最美应用项目源码 项目介绍 这是仿最美应用开发的基于mvp+rxjava+retrofit的项目,很值得学 github地址: https://github.com/JJOGGER/Beaut ...
- Ubuntu16.04安装MySQL
本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软件版本为准. 操作系统:Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-105-generic x86_64) ...
- Oracle11g 体系结构
一:Oracle11g 体系结构 二:逻辑储存结构 二.1:数据块(data blocks) ----通过 v$parameter数据字典来查询oracle标准数据块的大小. SYS@orcl> ...
- flask 面试题
1,什么是Flask,有什么优点?概念解释Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的日里 ...
- Linux 用户(user)和用户组(group)管理概述
一.理解Linux的单用户多任务,多用户多任务概念: Linux 是一个多用户.多任务的操作系统:我们应该了解单用户多任务和多用户多任务的概念: 1.Linux 的单用户多任务:单用户多任务:比如我们 ...
- PDF文件编辑技巧之PDF书签怎么设置
纸质的文件想要添加书签就直接拿笔书写就可以,Word文件怎么添加书签相信大家也都知道,那么PDF文件的书签要怎么设置的呢,是不是有很多小伙伴不知道该怎么做呢,不要担心,今天小编就来跟大家分享一下在PD ...
- java爬虫笔记
一.URl解释 1.URl统一资源定位符, Uniform Resource Location 也就是说是Internet上信息资源的字符串,所谓的网页抓取就是把URl地址中指定的网络资源从网络中读取 ...
- Winhex数据恢复学习笔记(三)
上次对文件系统进行简单的分析,这次就文件的镜像功能做一介绍 1.首先镜像的概念:镜像就是数据的副本,是原来数据在相同位置上以相同的排列模式生成的拷贝,所以镜像可以用来还原原始数据,代替原始数据工作,镜 ...
- eclipse检出SVN项目的正确步骤
一.在工作空间新建工作目录:workspace-xf 二.在工作目录下workspace-xf 新建文件夹 tdvs ,进入该文件夹鼠标右键:SVN CheckOut 检出需要的项目 三.打开ecl ...
- 插件使用一树形插件---zTree
zTree是一款挺好用的树形插件,中文文档齐全,demo丰富. 官方网站是 http://www.treejs.cn/v3/main.php#_zTreeInfo 源码网站 https://githu ...