我对python网络编程的理解 开首语: Python与我看过的《unix高级环境编程》等书籍原理上差不多一样,都需要socket来支撑,同时遵循TCP和UDP传输协议,在理论上和实际之中都需要创建客户端和服务端(C/S模式),利用socket数据流来进行通信。 网络编程应有的两点前提: 一、Socket:服务器与客户端之间进行通信媒介,信息都是以数据的形势存在,双方进行通信实际上都是在进行数据的交换,从而socket担当重要的角色,网络中“公交汽车”。这个网络公交汽车具备以下两点功能: 1) Send:从字面上来理解:“发送”,在实际的编程用途也是发送,对网络之中数据流进行发送,在创建socket模块对象以后调用此方法,可以发送程序想要发送的数据。 2) Recv(receive简写):从字面来理解是“接受”,在实际编程之中用途也是接受,此功能用来接受对方发送的数据,在创建socket模块对象以后掉用此方法,可以接受通信双方发送的数据。 有了以上两种方法后,解决了网络编程之中基本功能:接受和发送。但是在实际网络编程之中有以上两种方法永远不能解决实际问题,还得有许多其它的功能来支撑。 Socket的种类: AF_UNIX:也叫AF_LOCAL,这是基于文件的; AF_NETLINK:这是Linux系统支持的一种套接字; AF_INET:这个套接字是基于网络的。 二、端口号:端口号就像打电话一样,有区号和电话号。双方想要建立通信,就必须有此作为连接的前提,使用端口号一般是被限制的,在linux或者unix之中只有系统管理员才能使用1024以下端口号,这些端口号用于标准服务,比如80端口用于web服务。如果用Ctrl+C停止一个程序以后,要等上一段时间才能使用这个端口号,但是有时可能会返回一个错误信息“该端口正在使用”(在实际之中,我利用ctrl+c停止了进程之后,再运行同样的程序,会出错,我利用kill -9强制杀死了该进程,再次正常运行了该程序,体会了端口号的在实际之中存在)。 三、创建简单网络程序: 简单服务器建立: Import socket S = () Host = () Port = 1024 ((host,port)) (5) while True: c,addr = () print “连接来自于:”,addr (‘谢谢你给连接!’) () 小型客户机: Import socket S = () Host = () Port = 1024 ((host,port)) print (1024) () 程序解释: 1) 创建和执行流程: 服务器端:1.建立socket对象,调用socket模块; 2.进行本地地址绑定; 3.进行监听客户端发来的连接消息; 4.循环接受连接请求; 5.发送消息或者接受消息; 6.完成任务后,关闭套接字。 客户端:1.建立socket对象,调用socket对象; 2.连接请求; 3.接受消息; 4.完成任务后,关闭套接字。 2)客户端中用到了“while True”,利用真循环调节来无限接受客户连接请求,在理论上可以做到,但是在实际之中收到物理条件的限制,到达一定条件后会关闭客户端。 3)名词解释:bind(绑定)、listen(监听)、accept(接受)、connect(连接),recv(接受)。 四、网络中中文件操作: 在使用的各种网络编程工作库,功能最为强大为urllib、urllib2,简单的调用就能将远程机子上的文件像本地自己的文件一样来使用,几乎可以把任何url指向的东西作为程序输入。 这两个模块的功能差不多,但是只是简单的文件下载,urllib就足够,如果是要进行http验证或者用cookie来为自己的程序写扩展程序,urllib2是一个不错的选择。以下是使用方式: 打开远程文件: From urllib import urlopen Webpage = urlopen(‘’) 与使用本地文件不同的是,在使用远程文件的时候使用的是“只读”模式。Urlopen之中必须包含一个连接到网页文件路径,此时才能用urlopen来打开文件。 Urlopen返回的类文件对象支持close、read、readdline和readlines方法,当然也支持迭代。 注:如果想要实验rullib但现在没有在线,可以用以file开头的URL访问本地文件,比如:c:\向凯\(记得要对“\”进行转义)。 下载远程文件: 如果想在本地保存远程文件副本,此时urlopen提供了一个方法:urlretrieve。Urlretrieve返回一个元组(filename,headers)而不是类文件对象。如: Urlretrieve(‘’,’C:\\’) 这个语句获取python的主页并把它储存在文件C:\中。如果没有指定文件名,文件就会在放在临时的位置,用open函数可以打开它,但如果完成了对它的操作,就可以删除它。要清理临时文件,可以调用urlcleanup函数,但不要提供参数,该函数会负责清理工作。 感想与收获: 简单的网络编程我现在能够建立它,并且能够正常运行。但是这只是简单的网络编程,刚刚进入网络编程世界,还有许多原理还值得去学习,许多编程框架值得去学习,像我即将学到的:socketsever框架(一个功能更为强大的python网络编程模块)、分叉技术、实现多连接等等。自己心中还想到用多线程去实现网络编程,创建连接池来解决多个连接问题。 本文来源:https://www.wddqw.com/doc/7cd1ff40f66527d3240c844769eae009581ba222.html