【郑州校区】网络协议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():关闭套接字 ------------------------------使用线程编写案例------------------------------ [AppleScript] 纯文本查看 复制代码 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()
|