网络编程
1.cs构架 服务端客户端架构
软件cs构架:京东, 淘宝, qq, 微信, 暴风影音, 快播
硬件架构:打印机
服务端:提供服务的
客户端:享受服务的
BS架构:浏览器和服务端,谷歌, 360, IE
2.网络通信当中遇到的名词,硬件
网卡:接收电信号
mac地址:网卡的唯一标识,全球唯一,6位点分16进制
广播:信息发给所有人
单播:单独发个某人或者说某个设备
广播风暴:不安全,容易拥堵网络
IP地址:划分广播域
192.168.15.113四个点分十进制
集线器:将所有电脑连通起来
交换机:升级版集线器
DHCP协议:自动分ip地址
划分广播域-->ip网段:192.168.15.0---192.168.15.255属于同一子网
192.168.16.0---192.168.16.255
子网掩码:计算机目标ip地址是否和咱们同一网段
同一网段的:广播发送
不同网段的:发送给路由器
路由器(内网的作用):管理局域网
找外部网路的设备:
域名:www.jd.com --->ip地址
DNS服务器:记录着所有的域名和他网站对应的那台服务器的IP地址的对应关系,理解唯一个字典
{"www.jd.com":192.168.15.12}
网关:在路由器这,把关你对外的请求
NAT技术:将你的ip地址,转为网关的ip地址
外网又称为公网,网关的ip地址又称为外网ip地址或者公网ip地址
路由器(外网的作用):转发消息
路由协议:计算一个最优路径,然后进行路由转发
发到京东的路由器上,京东的路由器做了端口映射
端口:标识电脑上某个应用程序,范围0-65535 0-1024内部程序用的,我们一般使用的都是8000以后
通过IP地址+端口:我就能唯一确定一台电脑上的某个程序
3 socket
服务端:
import socket
#创建了一个socket对象
server = socket.socket() #创建一个手机
ip_port = ('192.168.15.113',8001) #创建了一张电话卡
#绑定IP地址和端口
server.bind(ip_port) #插上电话卡
#监听IP地址和端口
server.listen(3) #开机,后面等待链接的客户端个数为3个
print(11111)
#等待客户端的链接
conn, addr = server.accept() #等着别人给我打电话,阻塞住
while True:
#接收消息
from_client_msg = conn.recv(1024) #1024为消息大小,单位B,MB = 1024KB,1KB = 1024B
#接收的消息是bytes类型,需要转换为字符串
from_client_msg = from_client_msg.decode('utf-8')
print(from_client_msg)
msg = input('瑞鑫说:')
conn.send(msg.encode('utf-8'))
#关闭链接
conn.close()
server.close()
# print(conn)
# print('>>>>',addr)
客户端:import socketclient = socket.socket()
server_ip_port = ('192.168.15.105',8888)
#链接服务端
client.connect(server_ip_port)
while True:
msg = input('小虬哥想说:')
print('22222')
#发消息
client.send(msg.encode('utf-8')) #send里面的消息必须是字节类型的
from_server_msg = client.recv(1024) #阻塞住,等待接收消息
from_server_msg = from_server_msg.decode('utf-8')
print(from_server_msg)
client.close()
4.网络通信协议
osi七层,tcp\ip五层
tcp\ip五层
arg协议:通过IP地址找到mac地址
tcp和udp的区别
tcp协议:面向连接.消息可靠,相对udp来讲,传输速度慢,消息是面向流的,无消息保护边界.
udp协议:面向无连接,消息不可靠,传输速度快,消息面向包的,有消息保护边界
tcp代码和udp代码:
udp服务端:
import socket
#创建一个udp协议下的socket,需要使用参数type
udp_server = socket.socket(type=socket.SOCK_DGRAM) #DGRAM : datagram 数据报
#拿到一个地址,启动程序的时候,告诉电脑,你给我这个程序分配8001端口.
ip_port = ('192.168.15.113',8001)
#绑定IP地址和端口
udp_server.bind(ip_port)
print('准备接收消息了...')
#接收消息,from_client_msg来自客户端的消息,client_addr客户端的地址('192.168.15.113', 8001)
from_client_msg,client_addr = udp_server.recvfrom(1024) #阻塞住了
print(11111)
print(from_client_msg)
print(client_addr)
#发送消息
udp_server.sendto(b'gunduzi',client_addr)
#关闭udp的socket对象
udp_server.close()
upd客户端:
import socket
udp_client = socket.socket(type=socket.SOCK_DGRAM)
server_ip_port = ('192.168.15.113',8001)
udp_client.sendto(b'hello',server_ip_port)
from_server_msg,server_addr = udp_client.recvfrom(1024)
print(from_server_msg)
print(server_addr)
udp_client.close()