一、网络编程-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协议编码流程: 服务器端: 客户端 实例化对 ...
随机推荐
- STM32应用实例十五:STM32的ADC通道间干扰的问题
最近我们在开发一个项目时,用到了MCU自带的ADC,在调试过程中发现通道之间村在相互干扰的问题.以前其实也用过好几次,但要求都不高所以没有太关注,此次因为物理量的量程较大,所以看到了变化. 首先来说明 ...
- (转)scikit-learn主要模块和基本使用方法
从网上看到一篇总结的很不错的sklearn使用文档,备份勿忘. 引言 对于一些开始搞机器学习算法有害怕下手的小朋友,该如何快速入门,这让人挺挣扎的.在从事数据科学的人中,最常用的工具就是R和Pytho ...
- Ubuntu16.04安装MySQL
本篇教程在示例步骤中使用了以下版本的软件.操作时,请您以实际软件版本为准. 操作系统:Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-105-generic x86_64) ...
- Confluence 6 关于统一插件管理器
所有的组件通过 统一插件管理器(Universal Plugin Manager)进行管理,这个也被称为 UPM.UPM 可以在几乎所有的 Atlassian 应用中找到,能够提供完整同意的插件安装管 ...
- jquery通过visible来判断标签是否显示或隐藏
if($(".spnTotal").is(":visible")==false) { alert('隐藏'); } else { alert('显示'); }
- LeetCode(69):x 的平方根
Easy! 题目描述: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...
- vue中 裁剪,预览,上传图片 的插件
参考地址: https://github.com/dai-siki/vue-image-crop-upload
- spring cloud 自定义ribbon客户端
一.自定义Ribbon客户端-[方式一]配置类 1.1.自定义负载规则 增加RibbonConfiguration.java配置类 public class RibbonConfiguration { ...
- 饮冰三年-人工智能-linux-05 Linux进程
1:top 命令,查看cpu使用情况.(由于top是实时刷新,占用内存比较大) P:按照cpu使用率降序排列 M:按照内存使用率降序排列 2:free 命令,查看内存使用情况 free -m 以M为单 ...
- hive表中字段显示为NULL时,HDFS文件中存储为\N
hive数据落地到hdfs,null会默认用'\N'存储 解决方式1:利用命令(这个我没起效果) alter table adl_cici_test_fdt set serdeproperties(' ...