python学习之路---day25( 网络编程基础和初识socket)
基本网络知识和初识socket
一:基本知识
- 网线:传输电信号
- 集线器:将所有连接到集线器的网络设备连通起来
- 交换机: 升级版的集线器
- 网卡:接受电信号
- MAC地址:物理地址: 8C-88-4B-88-B9-CC #前三位厂商编号,后三位生产流水号
- 单播:只发送给一台电脑
- 广播:发送给所有局域网内的电脑端
- 广播风暴:网络拥堵,信息不安全
- Ip地址:
- IPv4 地址: 192.168.15.46 #4个点分十进制
- 作用:划分广播域
- 例如:
- 192.168.15.46 #
- Ipv4:192.168.15.0-192.168.15.255 # 八位二进制 256个电脑
- Ipv6:
- 192.168.0.0 - 192.168.255.255
- 例如一个小型办公点的地址段可以是:192.168.123.0 -- 192.168.123.255
- DHCP:自动分配IP地址
- Arp表:保存着ip地址和mac地址对应关系
- Arp协议:通过ip地址获取mac地址
- 子网掩码:计算两个ip地址是否属于同一网段:
- 255.255.255.0
- 源ip地址:192.168.15.46 ---〉目标的ip:192.168.16.30 #192.168.16.0
- 两个IP地址 与 运算后:
- 11000000.10101000.00001111.00101110
- 11111111.11111111.11111111.00000000
- 11000000.10101000.00001111.00000000 #192.168.15.0
- 路由器:转发消息
- 路由协议:计算路由转发消息的最优路径
- 端口号:0 - 65535,确定电脑上的应用程序的
- Ip地址+端口 = 确定某个电脑上的某个应用程序
二:网络通信整个流程:以我们访问京东的网站为例子:(主要点:Ip地址+端口 = 确定某个电脑上的某个应用程序)
- 第一步:打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址不好记,所有有了域名。)
- 第二步:先将请求信息发给了交换机,然后交给了路由器,路由发给DNS服务器,通过DNS协议去找我们要访问的京东的IP地址:
- 第三步:查到的京东服务器对应的IP地址之后,路由器通过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器
- 第四步:京东的路由器发给了京东网站的服务器上
- 第五步:京东网站服务器按照来的时候的路径,在返回给你他自己的网站
- 第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫做端口号,当你的电脑收到京东发送过来的消息的时候,你的
- 电脑通过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,然后将网站呈现在了自己的浏览器上
三:C\S 架构和B\S架构
- 01:C\S架构(****) client server
- 软件C\S架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信.....
- 02:B\S架构:浏览器(browser)\服务端>>>统一接口
- 硬件C\S架构: 打印机.、
四:socket初识
001:我们分别建立一个基础版的--〉服务端(server.py 文件)和一个客户端(client.py文件),让其能够互相发信息!
#server.py
- import socket
- server=socket.socket()
- ip_port=("192.168.xx.xx",8001)
- server.bind(ip_port)
- server.listen() #监听
- conn,addr=server.accept()
- from_client_msg=conn.recv(1024)
- print("来自客户端的消息",from_client_msg)
- conn.send(b"NONO")
- conn.close()
- server.close()
服务端
- #client.py
- import socket
- client=socket.socket()
- server_ip_port=("192.168.xx.xx",8001)
- client.connect(server_ip_port)
- client.send(b'aaa') #接受和发送的是bytes 类型的数据
- from_server_msg=client.recv(1024)
- print("来自服务端的消息:",from_server_msg)
- client.close()
客户端
- 先运行服务端文件(因为服务端需要一直开启,才能被客户端访问),再运行客户端去访问
客户端先给服务端发送一个信息,然后受到了服务端发来的回复信息!
002:升级版server和client,让他们互相能一直发送信息
- #server.py
- import socket
- server=socket.socket()
- ip_port=("192.168.xx.xx",8001)
- server.bind(ip_port)
- server.listen()
- conn,addr=server.accept()
- while 1:
- server_msg=input("服务端:")
- conn.send(server_msg.encode("utf-8")) #send消息
- from_client_msg=conn.recv(1024) #1024 一次性能够接受的消息大小
- print("来自客户端的消息",from_client_msg.decode("utf-8"))
- #关闭通道
- conn.close()
- #关闭socket
- server.close()
服务端
- #client.py
- import socket
- client=socket.socket()
- server_ip_port=("192.168.xx.xx",8001)
- client.connect(server_ip_port)
- while 1: #while 循环会非常占cpu
- from_server_msg1=client.recv(1024) #阻塞
- print("来自服务端的信息:",from_server_msg1.decode("utf-8"))
- client_msg=input("客户端:")
- client.send(client_msg.encode("utf-8")) #接受和发送的是bytes 类型的数据
- # from_server_msg=client.recv(1024)
- # print("来自服务端的消息:",from_server_msg)
- client.close()
客户端
python学习之路---day25( 网络编程基础和初识socket)的更多相关文章
- python学习之路-10 网络编程之进阶
本篇介绍内容 作用域 python类的多继承 IO多路复用 socketserver之源码剖析 多线程和多进程 作用域 if 1 == 1: name = "xxx" print( ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- python的学习之路day7-socket网络编程
python基础部分学习完了,时间也已经过了两个月左右,感觉没学到什么,可能是我学习之后忘记的太多了. 由于没钱买书,要是去培训就更没钱了,所以在网上找了一本书,感觉还不错,讲的比较好,比较详细. P ...
- Python学习(十三) —— 网络编程
一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...
- 4月18日 python学习总结 异常处理、网络编程
一. 异常 1.什么是异常 异常是错误发生的信号,程序一旦出错,如果程序中还没有相应的处理机制 那么该错误就会产生一个异常抛出来,程序的运行也随之终止 2.一个异常分为三部分: 1.异常的追踪信息 2 ...
- 从零开始学Python第八周:网络编程基础(socket)
Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Soc ...
- 吴裕雄--天生自然python学习笔记:Python3 网络编程
Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...
- 第1章 网络编程基础(3)——基本Socket通信
服务器常用模型
- python学习笔记(十二)-网络编程
本文结束使用 Requests 发送网络请求.requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.可以说,Requests 完全满足如今网络的需求. ...
随机推荐
- 求输出和为n的所有连续自然数序列
这是编程之美中的一道题.编程之美中的题目是这样的: 1+2=3 4+5=9 2+3+4=9 等式的左边都是两个或者两个以上的连续自然数相加,那么是不是所有的整数都可以写成这样的形式? 问题1:写个程序 ...
- 【HDU4966】GGS-DDU
题意 有n种科目,每个科目都有一个最高的等级a[i].开始的时候,每个科目的等级都是0.现在要选择一些课程进行学习使得每一个科目都达到最高等级.这里有m节课可供选择.对于每门课给出L1[i],c[i] ...
- ubuntu安装软件包apt-get和dpkg方法
1apt方法 安装软件 apt-get install softname1 softname2 softname3…… 卸载软件 apt-get remove softname1 softname2 ...
- .NET将服务器文件导出
导出文件: string filePath = Server.UrlDecode(filePath); if (File.Exists(fi ...
- Linux命令累积
常用命令 ipconfig -查看本机ip.接口等信息 ping ip -ping远程服务器或终端 cd ~ -返回根目录 cd .. 返回上级目录 cd ../.. 返回上两级目录 ...
- App测试从入门到精通之UI测试
UI(user interface用户界面)的简称.UI测试也是APP测试中需要考虑的一个层面.用户至上,这个太重要了.一个好的App在界面的UI层设计上应该要满足简洁.美观.大气(这个是自己感觉的哈 ...
- Android Tablayout属性介绍
1.添加依赖 compile 'com.android.support:design:26.0.0-alpha1' 2.属性 改变选中字体的颜色app:tabSelectedTextColor=&qu ...
- tomcat的内存配置,关于-Xms -Xmx -XX:PermSize -XX:MaxPermSize的理解和区别
JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间:非堆区即为代码.常量.外部访问(如文件访问流所占资源)等.然而虽然ja ...
- Listview 利用Datapager进行分页
原文:http://lgm9128.blog.163.com/blog/static/421734292010513111851101/ <asp:ListView ID="ListV ...
- 随便写个bat存档
@echo off @COLOR @echo ------------切换Hosts环境--------------- :Again @set /p choice="切换模式:A:应用环境, ...