二進制:00000000.00000000.00000000.00000000 - 11111111.11111111.11111111.11111111, 十進制:0.0.0.0 - 255.255.255.255
ipv6 python
0.0.0.0.0.0 - 255.255.255.255.255.255
172.16.10.1:10101100.00010000.00001010.000000001 255255.255.255.0:11111111.11111111.11111111.00000000 AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0 172.16.10.2:10101100.00010000.00001010.000000010 255.255.255.0:11111111.11111111.11111111.00000000 AND運算得網絡地址結果:10101100.00010000.00001010.000000001->172.16.10.0 結果都是172.16.10.0,所以它們在同一個子網絡。
11111111.11111111.11111111.00000000 11000000.10101000.00001101.11111101 11000000.10101000.00001101.00000000 # 局域網網段 192.168.13.0 # 這樣求出了一個網段地址
DHCP協議:自動獲取IP地址 Arp協議:廣播的方式發送數據包,經過IP地址獲取目標主機mac地址,IP地址不固定,mac是全球惟一的DNS:域名解析 域名:www.jd.com DNS服務端:{'www.jd.com':173.1.49.0} NAT轉換:網絡地址轉換 路由器:轉發消息,管理內網 路由協議:計算轉發消息的最優路徑 端口:標識某個應用程序 端口映射:0-65535 找到提供服務的程序 IP地址+端口:可以惟一鎖定一臺電腦和這個電腦上的某個應用程序 網關:把關用的,全部對外的請求,都要通過網關 NAT技術:網絡地址轉換,內網IP地址轉換位公網或者說外網的IP地址
三、初識socket瀏覽器
socket:用於網絡通訊的模塊,獨立於語言安全
import socket # 建立一個socket對象 server = socket.socket() # 給程序設置一個IP地址和端口號 ip_port = ('127.0.0.1',8080) # 綁定IP地址和端口號 server.bind(ip_port) # 監聽IP地址和端口 server.listen() # 等待創建鏈接,conn時鏈接通道,addr是客戶端地址 conn,addr = server.accept() # 服務端經過conn鏈接通道來收發消息,經過recv方法,recv裏面的參數是字節 1024B=1KB from_client_msg = conn.recv(1024) print('zhoyou say:',from_client_msg.decode('utf-8')) # 回覆消息:經過send方法,參數必須是字節類型的 conn.send('what?'.encode('utf-8')) # 關閉通道 conn.close() # 關閉socket對象, server.close()
客戶端:服務器
import socket # 建立一個socket對象 client = socket.socket() # 找到服務器的IP地址和端口 server_ip_port = ('127.0.0.1',8080) # 鏈接服務端的應用程序,經過connect方法,參數是服務端的IP地址和端口, client.connect(server_ip_port) # 發消息,用send方法,可是調用者是client的socket的對象 client.send('明天是週末嗎?'.encode('utf-8')) from_server_msg = client.recv(1024) print('孫翔說:',from_server_msg.decode('utf-8')) client.close()
兩個例子:微信
一、連續對話:server收一個發一個,client發一個收一個網絡
服務端:架構
import socket server = socket.socket() ip_port = ('127.0.0.1',8080) server.bind(ip_port) server.listen() conn,addr = server.accept() while 1: from_client_msg = conn.recv(1024) print('來着星空的消息:',from_client_msg.decode('utf-8')) to_client_msg = input('大海:') conn.send(to_client_msg.encode('utf-8'))
客戶端:併發
import socket client = socket.socket() client.connect(('127.0.0.1',8080)) while 1: to_server_msg = input('星空說:') client.send(to_server_msg.encode('utf-8')) from_server_msg = client.recv(1024) print('來自大海的消息:',from_server_msg.decode('utf-8'))
二、時間:server端:接收時間戳,轉化成而格式化時間,client:每隔10秒鐘把時間戳發給server端,time.time() socket
服務端:ide
import time import socket server = socket.socket() ip_port = ('127.0.0.1',8090) server.bind(ip_port) server.listen() conn,addr = server.accept() while 1: from_client_time = conn.recv(1024) from_clienttime_str = from_client_time.decode('utf-8') time_float = float(from_clienttime_str) time_stru = time.localtime(time_float) time_strf = time.strftime('%Y_%m-%d %H:%M:%S',time_stru) print(time_strf)
客戶端:
import time import socket client = socket.socket() client.connect(('127.0.0.1',8090)) while 1: client.send(str(time.time()).encode('utf-8')) time.sleep(1)