网络编程 027

一  C\S 架构 (客户端与服务端架构)

  软件c\s架构:京东 淘宝 qq 微信 暴风影音

  硬件c\s架构: 打印机

  客户端(client) :享受服务端提供的服务

  服务端(server) :给客户端提供服务

  B\S 浏览器和服务端 B(browser)   谷歌 360 IE

二 网络通信的整个流程(硬件\名词)

  网卡 :接收电信号  网络插口 :插网线

  mac地址 :(物理地址): ‎2C-56-DC-BA-B6-BF 16进制的6个数表示 前三位 厂商编号 后三位 流水号   网卡唯一标识, 全球唯一,相当于身份证

  集线器 :将所有的插上集线器的电脑连通起来

  交换机 :升级版集线器

  广播(信息发给所有人)\单播(单独发给某个人或某个状态): 传输方式

  广播风暴 :不安全 拥堵信息

  IP地址 :192.168.15.129  四个点分十进制组成    划分广播域  (192.168.15.0 -- 192.168.15.255)

  划分广播域

  IPv4 : 4个点分十进制(0-255)

  IPv6 : 6个冒号分十六进制    

    IPv6 地址: fe80::48c3:8f81:8474:c7d0%2

  DHCP协议 :自动分配IP地址

  子网掩码: 255.255.255.0  计算是否属于同一网段 属于同一网段的叫子网(计算目标IP地址是否属于同一网段)

    另外一个班的同学的IP地址为 : 192.168.14.25

    192.168.14.25

    255.255.255.0 

    11000000.10101000.00001110.00001100
    11111111.  11111111. 11111111.  00000000
    11000000.10101000.00001110.00000000

    192.168.14.0

  PowerDesigner  制图软件  processon

  路由器 :(内网)管理网络,(外网)联通外网,并且由路由转发 就是转发消息

  DNS服务器:域名 :www.jd.com  --> ip地址

  DNS服务器: 记录着所有的域名和网站对应的那台服务器的ip地址(类似于字典)

    例如 :{'www.jd.com':'192.158.165.02'}

  路由协议 : 计算最优路径

  网关 : 把关对外请求 公网(又称外网)IP,也可以说是路由器的IP地址

  

  NAT :网络地址转换 将局域网的地址转换为公网的IP地址,也就是网关的IP地址

  局域网\内网

  端口:电脑创建的标识 电脑上程序用的 .

  0-65535  , 0-1024 属于电脑内部的一些服务用的(千万别用) 自己写程序 一般用8000以后的

三 初识socket 

  它是一组接口, 把复杂的TCP/IP协议族隐藏在socket接口后面 对用户来说 一组简单的借口就是全部,让socket去组织数据,以符合指定的协议.例如 创建一个客户端和一个服务端彼此交互首先是服务端

# 服务器端
import socket
server = socket.socket() # 创建一个接受信息的对象 例如手机
ip_port = ('192.168.15.129',8002)# 创建一个电话卡
server.bind(ip_port) # 绑定ip地址和端口 插上电话卡
# 监听ip地址和端口
server.listen() # 开机
# 等待客户端的链接....
print('等待客户端的链接.....') conn,addr = server.accept() # 等着别人打电话 阻塞住 addr 客户端的IP地址+端口 conn与客户端的连接通道 # 接收消息 from_client_msg = conn.recv(1024) # 1024位消息大小 单位B, MB = 1024KB 一次性接收的最大数据量 # 接收的消息是 bytes类型,需要转化为字符串 from_client_msg = from_client_msg.decode('utf-8') #解码 转化成字符串 print(from_client_msg) 该代码只能对客户端信息进行显示 没有回应
conn.close() # 关闭连接 挂电话
server.close()

  接着创建客户端

import socket
client = socket.socket()  # 创建一个对象 即创建一个手机
client.connect(('192.168.15.129',8002)) #获取到服务器的电话号
client.send('约吗'.encode('utf-8')) #将信息进行编码 转成传输需要的bytes类型

  下来是服务器和客户交互 先是服务器:

import socket
server = socket.socket() # 创建一个手机
ip_port = ('192.168.15.129',8003) # 创建一个手机卡
server.bind(ip_port) # 插上手机卡
server.listen()  #开机
conn,addr = server.accept() #等着别人打电话
while 1:
    try :
        from_client_msg = conn.recv(1024)
        from_client_msg = from_client_msg.decode('utf-8')
        print(from_client_msg)
        msg  = input('服务器说:')
        conn.send(msg.encode('utf-8'))
    except ConnectionResetError:
        print('客户端已退出...')
        break
conn.close()
server.close()

  接下来是客户端:

import socket
client = socket.socket()
server_ip_port = ('192.168.15.129',8001)
#链接服务端
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()

 

posted @ 2018-10-15 19:01  你没有想象的那么重要  阅读(147)  评论(0编辑  收藏  举报