Python-网络编程(一)

首先咱们python基础部分已经学完了,而socket是咱们基础进阶的课程,也就是说,你本身如今彻底能够写一些小程序了,可是前面的学习和练习,咱们写的代码都是在本身的电脑上运行的,虽然咱们学过了模块引入,文件引入import等等,我能够在程序中获取到另外一个文件的内容,对吧,可是那么忽然有一天,你的朋友和你说:"把你电脑上的一个文件经过你本身写的程序发送到个人电脑上",这时候怎么办?你是否是会想,what?这怎么搞?就在此时,忽然灵感来了,我能够经过qq、云盘、微信等发送给他啊,但是人家说了,让你用本身写的程序啊,嗯,这是个问题,此时又来一个灵感,我给他发送文件确定是经过网络啊,这就产生了网络,对吧,那我怎么让个人程序可以经过网络来联系到个人朋友呢,而且把文件发送给他呢,那么查了一下,发现网络通讯经过socket能够搞,可是怎么搞呢?首先,查询结果是对的,socket就是网络通讯的工具,任何一门语言都有socket,他不是任何一个语言的专有名词,而是你们经过本身的程序与其余电脑进行网络通讯的时候都用它。知道为何要学习socket了吧~~朋友们~~而你使用本身的电脑和别人的电脑进行联系并发送消息或者文件等操做就叫作网络通讯。前端

  对于一个小白来说,看到这一节标题的你,此刻的你心里是拒绝的,不明白在说些什么。我理解你的心情,不要惊慌、不要着急,且听我娓娓道来。python

  你们经过上面的内容大体的了解了一下什么是网络通讯,那么在咱们的平常生活中,哪里用到了网络通讯呢,网络通讯的整个流程又是什么样子的呢?咱们要学的socket是怎么在网络中发挥做用的呢?让咱们怀揣着这 三个问题 来进行下面的学习。web

一.CS(服务端/客户端)架构chrome

  咱们使用qq、微信和别人聊天,经过浏览器来浏览页面、看京东的网站,经过优酷、快播(此处只是怀念一下)看片片啥的等等,经过无线打印机来打印一个word文档等,只要有无线、有网、有4G,咱们就能好好的聊天,好好的看片片、好好的购物什么的,对吧,那么这些操做都叫作网络通讯,确切来讲都须要使用网络通讯,前提是你要有网(你们记着这个'网',我下面会给你们详解),原来生活中到处使用了网络通讯,咱们经过网络通讯的不一样形式:好比说qq是咱们下载到电脑或者手机上的应用程序(qq应用程序就是人家腾讯开发的软件,放到你的电脑或者手机上供你使用的,大概明白应用程序意思就行,不用深究~~),浏览器也是咱们下载的应用程序,可是浏览器是经过页面来访问别人的网站的,而打印机我是经过我电脑上的word来操做使用的。根据这些不一样的场景或者说不用的沟通方式,在业内划分了下面两个架构(架构:就是不一样的组成结构)。在看下面的几个架构以前,咱们须要知道什么是客户端,什么是服务端。客户端:安装在你电脑上的qq,浏览器(360浏览器、chrome浏览器、IE浏览器等),当咱们使用qq发送消息的时候,消息先发送到了腾讯,而后腾讯在转发到你朋友的qq上,此时你的qq就是客户端,腾讯就是服务端。当咱们使用浏览器来看京东的网站的时候,咱们电脑上的浏览器就叫作客户端,京东就叫作服务端。编程

客户端英文名称:Client(使用服务端的服务),服务端英文名称:Server(一直运行着,等待服务别人,不能有一天访问百度,百度页面打不开,不行吧。),下面所说的C\S架构就是说的Client\Server架构。小程序

    a.硬件C\S架构:打印机。windows

    b.软件C\S架构:QQ、微信、优酷、暴风影音、浏览器(IE、火狐,360浏览器等)。其中浏览器又比较特殊,不少网站是基于浏览器来进行访问的,浏览器和各个网站服务端进行的通信方式又常被称为B\S架构(浏览器英文名称:Browser),web开发就是这个,后面你们知道有前端的课程对吧,前端就是浏览器上的知识,之后你会常常和浏览器打交道,学完前端就能够进行web开发全栈开发了。若是我把全部的东西都作成应用程序是否是很麻烦啊,要装不少的软件对吧,全部就开始有了B\S架构,只须要个浏览器就能使用不少的工具了,而且提供了一个统一入口,这也是为何B\S架构火了起来。可是手机端的仍是用的应用程序多一些,可是手机端B\S架构也是一个趋势,就像微信的小程序和公众号,为何说是一个趋势呢,不只仅是由于方便由于省钱,而是提供了一个统一的入口,其实微信早就实现了。统一入口是什么意思呢?就像咱们公司常常用的一个公司内部管理系统,请假、打卡、报销、查客户等等,若是这些功能都须要打开一个网页或者app,是否是很难受啊,那么公司就作了这么一个系统,你们在这个系统上关于上班的一些你须要的功能就都能完成了,这就是统一入口。这也是一个开发思想,大程序分红几个小程序,开发速度也快,开发一个小功能就能上线,而不须要等着全部的功能所有开发完成才上线,解耦分治思想,公司作开发时这种思想很流行,迭代开发。说多了。。浏览器

    无论哪一个架构,他们都要进行网络通讯,基本都要用socket,咱们学习socekt就是为了完成C\S架构项目的开发服务器

二.网络通讯流程微信

  明白了上面的C\S架构以后,咱们就以本身本地的电脑上的浏览器去访问的京东网站的整个流程这种B\S架构来举例,有同窗可能会问:你怎么不用qq或者微信来举例啊,是这样,由于qq和微信这种P2P的通讯方式仍是比较特殊的,也比较繁琐,具体为何说它繁琐,我在博客的最后给你们说一下,而后有兴趣的同窗能够去研究一番~~~

  网卡和mac地址

    你的电脑想要联网,首先要有一个网卡,并且电脑要作好相关的网路配置(如何配置,在下面有介绍)

    电脑插网线的地方就作网卡,网卡提供了网络的接口,这是硬件上面的,你们都是到网口是吧,我怎么找到电脑的网卡呢,有人说用IP地址,IP地址并非,而是全球惟一的mac地址,专门给网络设备设定的,是出厂的时候就给定好的,一个设备的mac地址号码是全球惟一的。 head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具有网卡,发送端和接收端的地址即是指网卡的地址,即mac地址。   mac地址:每块网卡出厂时都被烧制上一个世界惟一的mac地址,长度为48位2进制,一般由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

      查看mac地址的方法:windows下在cmd窗口输入ipconfig -all指令:下面显示的这个物理地址就是mac地址。

 

    因为mac地址很难记忆,因此又出现了IP地址,在说IP地址以前,咱们先说一下编码,咱们都是到一个字节等于8位对吧,8个2进制的数,那么8位是否是能够表示256个字节啊,因为全球有太多的机器须要联网,那么网络设备的编号应该长一些,对不对,由4个点分十进制组成,由点分割的四个十进制的数,而十进制的数是否是在计算机中也是由二进制表示的啊,那么就成了这个样子:00000000.00000000.00000000.00000000 -- 11111111.11111111.11111111.11111111,0.0.0.0--255.255.255.255,也就是由4个8位的二进制数表示,这个表示就是咱们的IP地址的形式。

      若是你用网线连网的,查看本身网络的属性,而且能够将ipv4版本的ip地址能够设置成静态的、也能够自动获取(动态分配的),下面是网络配置的大体方法:

      一、

      

      二、

      

 

       三、

      

       配置好本身电脑的网络信息以后,咱们就有了身份证(mac地址)和名字(IP地址),经过他们,咱们就在网络中有了本身的身份,只要有网,咱们就能够正大光明的和别人进行通讯了。

      arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

      下面是网络通讯流程图:

  流程描述:

  第一步:打开浏览器,想要请求访问京东,在地址栏输入了网址:www.jd.com。(www.jd.com是域名就是一个IP地址的名称,IP地址很差记,全部有了域名。)

  第二步:先将请求信息发给了交换机,而后交给了路由器,路由发给DNS服务器,经过DNS协议去找咱们要访问的京东的IP地址:

  第三步:查到的京东服务器对应的IP地址以后,路由器经过路由协议找到一个路由转发的最优路径,将你的请求信息还送给这个IP地址的京东的路由器

  第四步:京东的路由器发给了京东网站的服务器上

  第五步:京东网站服务器按照来的时候的路径,在返回给你他本身的网站

  第六步:当你打开浏览器的时候,你的电脑给你的浏览器这个运行起来的程序给了一个编号,叫作端口号,当你的电脑收到京东发送过来的消息的时候,你的电脑经过端口号找到你的浏览器,你的浏览器拿到了京东的网站信息,而后将网站呈如今了本身的浏览器上

  内网和外网:   

    所谓内网就是咱们日常说的局域网。局域网就是在固定的一个地理区域内由2台以上的电脑用网线和其余网络设备搭建而成的一个封闭的计算机组。它能够是邻居之间的2台电脑,也能够是一幢100层大楼里的1000台电脑。局域网能够是独立封闭运行的,也能够是和外网相链接的。
所谓外网,也就是广域网。是一种地域跨度很是大的网络集合。它是由无数个局域网+独立服务器构成的。注意,此处所说的局域网既能够是小型的广域网,也能够是局域网。
    实际上,从规模上来看咱们很难分辨局域网与广域网,由于大小都是相对的。因此。真正局域网与广域网的分别是经过IP地址来实现的。
    任何一台电脑要上网,都必须在网络上有一个惟一的IP地址。在局域网内,这个IP地址是惟一的。可是在另一个局域网,这个IP地址仍然可以使用。
    网络A里有一台IP地址为192.168.1.231的客户端,网络B里也能够有一台一样IP的电脑。那么。咱们就说这2台机器分别在2个局域网里。可是在广域网内,全部的IP地址都是惟一的。山西电信的DNS服务器IP地址是61.134.1.4.那么,这个地址在全世界都是惟一的,不可重复的。这就是广域网和局域网的区别。

    若是只有内网的ip地址你是不能上网的,你上网确定要经过一个外网地址,这个外网地址又称为公网地址,这个公网地址是全球惟一的,他在你的对外出口的路由器上,也就是你的外网网关地址

三.初始socket

  还记得上面我说过的那个'网'吗,在这一节就给你们讲解,有些同窗对网络是既熟悉又陌生,熟悉是由于咱们都知道,咱们安装一个路由器,拉一个网线,或者用无限路由器,连上网线或者连上wifi就可以上网购物、看片片、吃鸡了,可是这一系列的神操做究竟是怎么让咱们上网了呢?让咱们起底揭秘!因为网络的内容很是的多,本篇博客主要是学socket网络编程,因此我把网络这方面的内容放到了我另一篇博客上,这个博客很简单,不是什么深刻研究类的博客,有网络基础的同窗,能够直接往下面学习

  别忘了端口+IP可以肯定一台电脑上的某一个应用程序~~

  那么咱们经过下面的代码简单看一下socket究竟是个什么样子,大概怎么使用:下面的程序就是一个应用程序,和qq啊、微信啊是同样的,都叫作应用程序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import  socket
#建立一个socket对象
server  =  socket.socket()   #至关于建立了一部电话
ip_port  =  ( '192.168.111.1' , 8001 #建立一个电话卡
server.bind(ip_port)  #插上电话卡
server.listen( 5 #监听着电话,我能监听5个,接到一个电话以后,后面还能有四我的给我打电话,可是后面这四我的都要排队等着,等着我第一个电话挂掉,再来第6个的时候,第六我的的手机会报错
print ( '11111' )
#等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr
conn,addr  =  server.accept()   #阻塞住,一直等到有人链接我,链接以后获得一个元祖,里面是连线通道conn和对方的地址(ip+端口)
print ( '22222' )
print (conn)
print ( '>>>>>>>>>' ,addr)
while  True :
     from_client_data  =  conn.recv( 1024 #服务端必须经过二者之间的链接通道来收消息
     from_client_data  =  from_client_data.decode( 'utf-8' )
     print (from_client_data)
     if  from_client_data  = =  'bye' :
         break
     server_input  =  input ( '明威说>>>>:' )
     conn.send(server_input.encode( 'utf-8' ))
     if  server_input  = =  'bye' :
         break
conn.close()  #挂电话
server.close()  #关手机

  listen(3),这个3的意思是我链接着一个,后面还能够有三个排队的,也就是支持4我的的服务,可是后面三个要排队。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#_*_coding:utf-8_*_
import  socket
import  time
 
client  =  socket.socket()
server_ip_port  =  ( '192.168.111.1' , 8001 )
 
client.connect(server_ip_port)
 
while  True :
     client_input  =  input ( '小文说>>>>:' )
     client.send(client_input.encode( 'utf-8' ))  #给服务端发送消息
     if  client_input  = =  'bye' :
         break
     from_server_data  =  client.recv( 1024 )
 
     print ( '来自服务端的消息:' ,from_server_data.decode( 'utf-8' ))
     if  from_server_data.decode( 'utf-8' = =  'bye' :
         break
client.close()  #客户端挂电话

  注意:先运行server,而后再运行client,而后你会发现client这个文件再输出台的地方让你输入内容,你输入一个内容而后回车,你会发现server那边的控制台就输出了以client发送的内容

四 总结及其余一些内容简介

  最后,至于路由是如何进行转发的、内部路由表是如何保存的、网关是如何计算最后传输路线的、路由的内网是如何划分的、DHCP和静态IP是如何设置的,DHCP又是如何分配IP地址的,交换机内部工做原理、路由和交换机如何进行配置等等,咱们在本篇博客上就不进行深刻研究了,本篇博客是为了让小白同窗熟悉一下网路相关知识。谢谢你们谅解,如何你们想了解其余的内容,请给我留言,我就会把相关内容整理出来,分享给你们。你的问题是咱们共同进步的动力。

  为何说qq这种p2p的网络通讯方式比较特殊呢,由于它是两个局域网的电脑或者手机进行通信,双方不能肯定对方的IP地址,由于你的qq也不知道在哪里登录,用什么网络,对吧,也就是说双方不知道对方的IP地址,怎么办,须要借助第三方承接,就是腾讯,那么这里面就涉及到了udp打洞,net穿透等技术,有兴趣的能够去了解一下,腾讯为何nb,也是由于它基本上是国内第一家实现了这些技术的公司,让咱们的qq沟通更加方便。

相关文章
相关标签/搜索