一、网络编程-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 ...
- iOS 去除百度地图下方的 logo
UIView *mView = _mapView.subviews.firstObject; for (id logoView in mView.subviews) { if ([logoView ...
- LeetCode(67):二进制求和
Easy! 题目描述: 给定两个二进制字符串,返回它们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = " ...
- Metasploit (二)
1.测试一台搭建的主机 msf > db_nmap -n -A 10.140.110.16[*] Nmap: Starting Nmap 7.60 ( https://nmap.org ) at ...
- data-key
在foreach或者each循环中给按钮赋予值 html中:data-key="@config.key" js里获取值: var key = $(this).data(" ...
- 饮冰三年-人工智能-linux-02 初始Linux
参考博客:https://www.cnblogs.com/linhaifeng/articles/6045600.html 1:初始Linux命令 右击,开启终端,或者ctrl+alt[F1-F6]的 ...
- python多线程爬取-今日头条的街拍数据(附源码加思路注释)
这里用的是json+re+requests+beautifulsoup+多线程 1 import json import re from multiprocessing.pool import Poo ...
- 插件使用一顶部消息提示---overhang
overhang 是一个非常好的消息提示插件,它是在顶部提示. 官方网站:https://github.com/paulkr/overhang.js 使用方法 1.引入jquery库和jqeury u ...
- 三 os模块
os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相 ...
- Android Studio Flavors的妙用(转)
这两天发现Android Studio 的Flavors用起来相当给力!这里跟大家分享下: Flavors中文翻译过来叫“口味”,不知道确切叫法是啥,它的功能就是允许你的APP有多个不同的版本,不同版 ...