• 网络协议UDP


    ------------------------------互联网协议与协议族------------------------------
    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():关闭套接字

     

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

      1 #coding=utf-8
      2 '''
      3     用Python编写一个简单的socket程序,服务器想客户端发送一句话“Python is not hard”,客户端回送一句话“life is short,please use python”
      4 '''
      5 
      6 #引用对应的包
      7 # from socket import socket
      8 import socket
      9 import sys
     10 import threading
     11 from time import sleep
     12 
     13 
     14 #线程:模拟udp服务器向客户端发送一句话:Python is not hard
     15 class ServerThread(threading.Thread):
     16     #重写对应的构造方法
     17     def __init__(self, port):
     18         threading.Thread.__init__(self)
     19         self.port = port
     20 
     21     #进行run方法的重写操作
     22     def run(self):
     23         #创建udp服务器套接字
     24         self.serverSoc=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     25 
     26         #元组,存储服务器端ip地址和端口号
     27         self.locker = ('192.168.241.128',self.port)
     28 
     29         #绑定服务器ip和端口
     30         self.serverSoc.bind(self.locker)        
     31 
     32 
     33         #元组,存储要发送的指定客户端的ip地址和端口号,客户端指定端口号为8080
     34         self.sendAddr = ('192.168.241.128',8080)
     35 
     36 
     37         print("服务器开启")
     38 
     39         sleep(1)
     40 
     41         #变量,存储要发送的内容
     42         self.sendDate = 'Python is not hard'
     43 
     44         #进行数据向客户的发送
     45         self.serverSoc.sendto(self.sendDate,self.sendAddr)
     46 
     47         #阻塞,接受客户端回发回来的数据信息
     48         self.recvDate,self.recvAddr = self.serverSoc.recvfrom(1024)
     49 
     50         print("客户端:%s"%(self.recvDate))
     51 
     52         #关闭套接字
     53         self.serverSoc.close()
     54 
     55 
     56 #线程:模拟udp客户端接受服务器发送的数据,并且恢复一句“life is short,please use python”
     57 class ClientThread(threading.Thread):
     58     #重写对应的构造方法
     59     def __init__(self,port):
     60         threading.Thread.__init__(self)
     61         self.port = port
     62 
     63     #重写对应的run方法
     64     def run(self):
     65         #创建udp客户端套接字
     66         self.clientSoc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     67         
     68         #元组,存储客户端ip地址和端口号,指定客户端端口号为8080
     69         self.locker = ('192.168.241.128',8080)
     70 
     71         self.sendAddr = ('192.168.241.128',self.port)
     72 
     73         #绑定
     74         self.clientSoc.bind(self.locker)
     75 
     76         print("客户端开启")
     77 
     78         # # #阻塞,等待接受服务器发送过来的数据信息
     79         # self.recvDate = self.clientSoc.recvfrom(1024)
     80         # print(type(self.recvDate)) #属性测试
     81         # #服务器发送过来的数据为:('Python is not hard', ('192.168.241.128', 8080))
     82         # print("服务器发送过来的数据为:%s"%(str(self.recvDate)))
     83 
     84         #接受对应发送过来的数据信息
     85         self.recvDate,self.recvAddr = self.clientSoc.recvfrom(1024)
     86 
     87         print("服务器发送过来的数据为:%s"%self.recvDate)
     88 
     89         #回发的数据信息
     90         self.sendDate = ''
     91 
     92         if(self.recvDate == 'Python is not hard'):
     93             #回发的数据信息
     94             self.sendDate = "life is short,please use python"
     95 
     96         #数据向服务器回复
     97         self.clientSoc.sendto(self.sendDate,self.sendAddr)
     98 
     99         #关闭套接字
    100         self.clientSoc.close()
    101 
    102 
    103 #main函数
    104 def main():
    105     #变量接受udp服务器指定端口号
    106     port=int(sys.argv[1])
    107 
    108     #多线程创建udp服务器和udp客户端
    109     serverThread=ServerThread(port)
    110     clientThread=ClientThread(port)
    111 
    112     #开启线程
    113     serverThread.start()
    114     clientThread.start()
    115 
    116 
    117 
    118 #程序入口
    119 if __name__ == '__main__':
    120     main()        

     

  • 相关阅读:
    http statusCode(状态码) 200、300、400、500序列
    一行css代码调试中学到的javascript知识,很有意思
    jquery中的cookie
    图片预加载和AJAX的图片预加载
    关于图片懒加载
    iframe的自适应
    阻止微信端浏览器下滑出现空白条现象
    动态加载js文件
    kaldi 的安装和测试
    Python算法-排序
  • 原文地址:https://www.cnblogs.com/qingtianyu2015/p/5844106.html
Copyright © 2020-2023  润新知