二进制: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)