知识点基本介绍: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套接字使用的更多相关文章

  1. ~~网络编程(四):socket套接字~~

    进击のpython ***** 网络编程--socket socket的中文意思叫做套接字,socket方法其实也叫套接字方法 我们研究过TCP/UDP协议,但是要是让我们自己搭建,就十分困难了 而这 ...

  2. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

  3. 【Java】Java网络编程菜鸟进阶:TCP和套接字入门

    Java网络编程菜鸟进阶:TCP和套接字入门 JDK 提供了对 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protoco ...

  4. 【UNIX网络编程(四)】TCP套接字编程具体分析

    引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...

  5. Python 31 TCP协议 、socket套接字

    1.TCP协议 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割. (1)三次握手建链接( ...

  6. 传输模型, tcp socket套接字

    osi七层模型 tcp/ip四层模型 socket套接字 tcp 协议是可靠的  包括 三次握手 四次挥手 import socket # server server = socket.socket( ...

  7. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  8. 基于UDP协议的socket套接字编程

    目录 一.UDP套接字简单示例 1.1 服务端 二.客户端 三.UPD套接字无粘包问题 3.1 服务端 3.2 客户端 四.qq聊天 4.1 服务端 4.2 客户端1 4.3 客户端2 4.4 运行结 ...

  9. 网络编程: 基于TCP协议的socket, 实现一对一, 一对多通信

    TCP协议  面向连接 可靠的 面向字节流形式的 tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 TCP协议编码流程: 服务器端:                 客户端 实例化对 ...

随机推荐

  1. Confluence 6 管理协同编辑 - 代理和 SSL 的考虑

    对于你如何连接  Synchrony 是与你的环境有关的.我们知道绝大部分的 Confluence 站点是运行在反向代理后面的,同时还使用了 SSL.这里是帮助你在你环境中识别正确的配置的一些信息和一 ...

  2. uva11827 处理下输入

    /*0.012s*/ #include<cstdio> #include<algorithm> using namespace std; ], n; int gcd(int a ...

  3. CF1019C

    好玄学的东西... 核心思想:for循环! 首先,我们从前向后扫所有的点,如果这个点没被标记成不可用就把这个点标记成已使用,然后把所有与这个点直接相连的点标记成不可用 接下来,我们从后向前扫所有的点, ...

  4. 20165314 2016-2017-2 《Java程序设计》第7周学习总结

    20165314 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 MySQL数据库管理系统 连接MySQL数据库 JDBC 批处理 代码托管

  5. Django中模板使用

    第一步:配置 1.在工程中创建模板目录templates. 2.在settings.py配置文件中修改TEMPLATES配置项的DIRS值:TEMPLATES = [ { 'BACKEND': 'dj ...

  6. windows上编译boost库

    要用xx库,编译boost时就指定--with-xx.例如: # 下载并解压boost_1.58 # 进入boost_1.58目录 bjam.exe toolset=msvc-14.0 --build ...

  7. (Access denied for user 'root'@'slaver1' (using password: YES))

    1.问题描述,启动azkaban的时候报如下所示的错误.之前使用azkaban是root用户,今天使用hadoop用户进行配置和使用,报这个错,说是root连接mysql拒绝了. [hadoop@sl ...

  8. centos6.x完全禁用IPv6的方法

    https://blog.csdn.net/prettyshuang/article/details/51731890

  9. webpack学习笔记--配置module

    Module module 配置如何处理模块. 配置 Loader rules  配置模块的读取和解析规则,通常用来配置 Loader.其类型是一个数组,数组里每一项都描述了如何去处理部分文件. 配置 ...

  10. [转] node.js下mongoose简单操作实例

    Mongoose API : http://mongoosejs.com/docs/api.html // mongoose 链接 var mongoose = require('mongoose') ...