网络协议UDP

南笙酒味 提交于 2020-03-09 11:41:29
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():关闭套接字
------------------------------使用线程编写案例------------------------------
[AppleScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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()

更多学习资料可关注:itheimaGZ获取

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!