------------------------------互联网协议与协议族------------------------------
tcp/ip协议介绍:计算机网络协议,不同类型不同厂家之间的终端进行沟通,规范协议

互联网协议族:为tcp/ip协议族 大概有上百种协议,其中tcp协议、ip协议使用的比较

多所以大家默认成为tcp/ip


IP地址:网络地址(ip地址与子网掩码进行与运算获得)和主机地址
A类IP地址:由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”

(地址范围1.0.0.1-126.255.255.254)
B类IP地址:由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是

“10”(128.1.0.1-191.255.255.254)
C类IP地址:由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须

是“110”(范围192.0.1.1-223.255.255.254)

------------------------------socket介绍------------------------------
#定义:socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主

要不同是:

#import socket:应用socket包
#socket.socket(Address Family,Type):创建一个套接字,返回socket的描述符
Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者

AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
Type:套接字类型,可以是 SOCKET_STREAM(流式套接字,主要用于 TCP 协议

)或者 SOCKET_DGRAM(数据报套接字,主要用于 UDP 协议)

------------------------------udp协议------------------------------
upd协议:快速传播数据,但不太安全。19世界70年代

#udpSocket = socket(AF_INET, SOCK_DGRAM):创建套接字

#sendData = raw_input("请输入要发送的数据:"):从键盘获取数据

#sendAddr = ('192.168.1.103', 8080):准备接收方的地址

#bindAddr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
#udpSocket.bind(bindAddr)# 绑定本地的相关信息,如果一个网络程序不绑定,则系统

会随机分配

#udpSocket.sendto(sendData, sendAddr):发送数据到指定的电脑上

#recvData=udpSocket.recvfrom(1024):接收数据,1024表示本次接收的最大字节数

#udpSocket.close():关闭套接字

------------------------------使用线程编写案例------------------------------

 #coding=utf-8
'''
用Python编写一个简单的socket程序,服务器想客户端发送一句话“Python is not hard”,客户端回送一句话“life is short,please use python”
''' #引用对应的包
# from socket import socket
import socket
import sys
import threading
from time import sleep #线程:模拟udp服务器向客户端发送一句话:Python is not hard
class ServerThread(threading.Thread):
#重写对应的构造方法
def __init__(self, port):
threading.Thread.__init__(self)
self.port = port #进行run方法的重写操作
def run(self):
#创建udp服务器套接字
self.serverSoc=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #元组,存储服务器端ip地址和端口号
self.locker = ('192.168.241.128',self.port) #绑定服务器ip和端口
self.serverSoc.bind(self.locker) #元组,存储要发送的指定客户端的ip地址和端口号,客户端指定端口号为8080
self.sendAddr = ('192.168.241.128',8080) print("服务器开启") sleep(1) #变量,存储要发送的内容
self.sendDate = 'Python is not hard' #进行数据向客户的发送
self.serverSoc.sendto(self.sendDate,self.sendAddr) #阻塞,接受客户端回发回来的数据信息
self.recvDate,self.recvAddr = self.serverSoc.recvfrom(1024) print("客户端:%s"%(self.recvDate)) #关闭套接字
self.serverSoc.close() #线程:模拟udp客户端接受服务器发送的数据,并且恢复一句“life is short,please use python”
class ClientThread(threading.Thread):
#重写对应的构造方法
def __init__(self,port):
threading.Thread.__init__(self)
self.port = port #重写对应的run方法
def run(self):
#创建udp客户端套接字
self.clientSoc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #元组,存储客户端ip地址和端口号,指定客户端端口号为8080
self.locker = ('192.168.241.128',8080) self.sendAddr = ('192.168.241.128',self.port) #绑定
self.clientSoc.bind(self.locker) print("客户端开启") # # #阻塞,等待接受服务器发送过来的数据信息
# self.recvDate = self.clientSoc.recvfrom(1024)
# print(type(self.recvDate)) #属性测试
# #服务器发送过来的数据为:('Python is not hard', ('192.168.241.128', 8080))
# print("服务器发送过来的数据为:%s"%(str(self.recvDate))) #接受对应发送过来的数据信息
self.recvDate,self.recvAddr = self.clientSoc.recvfrom(1024) print("服务器发送过来的数据为:%s"%self.recvDate) #回发的数据信息
self.sendDate = '' if(self.recvDate == 'Python is not hard'):
#回发的数据信息
self.sendDate = "life is short,please use python" #数据向服务器回复
self.clientSoc.sendto(self.sendDate,self.sendAddr) #关闭套接字
self.clientSoc.close() #main函数
def main():
#变量接受udp服务器指定端口号
port=int(sys.argv[1]) #多线程创建udp服务器和udp客户端
serverThread=ServerThread(port)
clientThread=ClientThread(port) #开启线程
serverThread.start()
clientThread.start() #程序入口
if __name__ == '__main__':
main()

网络协议UDP的更多相关文章

  1. [网络协议]UDP实现的可靠协议

    UDP实现的可靠协议,基本都会对TCP的某一部分进行加强,另外一部分进行削弱.因为: “实时性+可靠性+公平性” 三者不能同时保证,因此可以牺牲TCP的局部公平性来换取更好的实时性,或者更浪费点带宽, ...

  2. 网络协议 7 - UDP 协议:性善碰到城会玩

        网络协议五步登天路,我们一路迈过了物理层.链路层,今天终于到了传输层.从这一层开始,很多知识应该都是服务端开发必备的知识了,今天我们就一起来梳理下.     其实,讲到 UDP,就少不了 TC ...

  3. 网络协议之UDP

    前言 TCP协议在不可靠的网络环境上提供了可靠的通信通道,隐藏了大量的底层细节,使应用程序更加简洁.但有些应用并不需要这么高的可靠性,并不需要按序交付,而且TCP为了提高可靠性也增加了延时,在某些对延 ...

  4. 网络协议HTTP TCP/UDP 浏览器缓存 Restful(十)

    一 TCP网络协议 1 建立TCP连接:三次握手原则 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分.客户端把这段连接的序号设定为随机数 A. 服务器端应当为一个合法的SY ...

  5. 网络编程——UDP协议和通信

    第1章 UDP与TCP协议 在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是 ...

  6. 网络协议 7 - UDP 协议

    网络协议五步登天路,我们一路迈过了物理层.链路层,今天终于到了传输层.从这一层开始,很多知识应该都是服务端开发必备的知识了,今天我们就一起来梳理下.     其实,讲到 UDP,就少不了 TCP.这俩 ...

  7. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  8. 31.网络协议介绍tcp/udp

    网络协议 TCP:网络中传输数据的协议,打电话 解决了我可能在网络中找不到别人(数据无法传输到) 保证数据传输的稳定性,可靠性 保证数据的安全性,完整性 对方要有响应 尝试重新发送 UDP:传输数据的 ...

  9. 网络协议: TCP/IP 和UDP/IP

    网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...

随机推荐

  1. C语言编译过程(转)

    内容摘要 : C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识.硬件知识.工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问 ...

  2. ThreadLocal源码分析(转)

    阅读总结: ThreadLocal内部使用静态map存储,每个变量对应一个hashcode,不需要指定key值,后台动态生成,good! 每个变量ThreadLocal内部分配Entry,获取值时,通 ...

  3. Android学习笔记-TextView(文本框)(二)

    2.4 使用autoLink属性识别链接类型 当文字中出现了URL,E-Mail,电话号码,地图的时候,我们可以通过设置autoLink属性:当我们点击 文字中对应部分的文字,即可跳转至某默认APP, ...

  4. 6步就能搞出个react网站哈,玩一把!

    1.安装mk-tools命令行工具   $ npm i -g mk-tools   2.创建空website   $ mk website myDemo $ cd myDemo    3.clone应 ...

  5. OC-UICollectionView实现瀑布流

    UICollectionView实现瀑布流 在iOS中可以实现瀑布流的目前已知的有2种方案: 使用UIScrollView自己封装一套,这种方案是应用于iOS6之前的,因为iOS6才出来UIColle ...

  6. NYOJ--325--深度优先搜索--zb的生日

    /* Name: NYOJ--325--zb的生日 Author: shen_渊 Date: 15/04/17 08:18 Description: 输入时计算总质量,DFS搜索和总质量差值一般最接近 ...

  7. [stm32F429-DISCO-HAL] 1.先说说关于stm32Cube的一些事情。然后,Start with it...

    目前,我觉得STM32CUBE最大的方便在于,可以使用STM32CubeMX软件来图形化配置外设.首先贴出官网的PDF,Getting started with STM32CubeF4 firmwar ...

  8. IPython+:一个交互式计算和开发环境

    一. IPython基础 代码自动补全:Tab键 可补全内容包括:变量名.函数名.成员变量函数.目录文件 内省(Itrospection) 在变量名之前或之后加上问号(?),这样可以显示这个对象的相关 ...

  9. Adaboost、RandomFrest、GBRT的区别

    Adaboost.RandomFrest.GBRT都是基于决策树的组合算法 Adaboost是通过迭代地学习每一个基分类器,每次迭代中,把上一次错分类的数据权值增大,正确分类的数据权值减小,然后将基分 ...

  10. 关于MVC项目中的主管放行

    一线程序员和 sa 总是相恨相杀,这话确实不假,吐槽这里就不多讲,项目快开发完的时候,让之前各个模块的增删改的操作全部都先放入对应的临时表(增加一状态栏位Status,来表示增.删.改)中,然后在主管 ...