2008年10月30日 星期四 17:36
考虑到Python网络编程的强大,和这本书的读者类型。这里只对socket模块做简单介绍,从而使读者(Python新手)对Python网络有个初步了解,对后期的深入有一定的帮助。 下面内容请审阅。 --------- ##language:zh #pragma section-numbers off ||status|| 草稿 ||孔建军; 90%|| [[TableOfContents]] ##startInc = PCS216 socket = == 概述 == Python中提供了丰富的网络编程模块,适当的调用这些模块可以大大提高编程效率。同时你会惊奇的发现,Python作为脚本语言,对部分网络协议的实现效率相当快。这里介绍的socket模块,是Python网络编程最最基础一个模块。当然在进行网络编程之前你必须对网络基本体系结构和基本原理清楚,在这基础之上如果你做过类似的 == 使用 == === 建立网络服务端 === 网络服务端的建立过程分为六个阶段,创建Socket对象、绑定端口、监听连接、接受请求、数据收发、关闭端口。 分别对应函式 socket.socket()、socket.bind()、socket.listen()、socket.accept()、socket.sendall()\socket.recv()、socket.close() {{{#!python # coding:utf-8 import socket # 监听本机5678端口,当有客户端请求时,回复指定字符串 host = '127.0.0.1 ' port = 5678 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #采用TCP协议 s.bind((host, port)) #绑定socket s.listen(1) #服务器监听连接 while 1: #这里的whil循环,可以使程序多地响应多客户端的请求 clientSocket,clientAddr = s.accept() #接受客户端连接 print 'Client connected!' clientSocket.sendall('Welcome to Python World!') #向客户端发送字符串 clientSocket.close() #关闭与客户端的连接 }}} 这里采用的是可靠连接TCP协议,与之相对应的是不可靠的无连接的UDP协议。创建socket对象的协议类型,由socket.socket()的第二个参数决定。socket.SOCK_STREAM代表TCP协议,socket.SOCK_DGRAM代表UDP协议。当然采用不同协议的socket对象的操作函式有些差异,这里列举的两个例子都是采用TCP协议的。 运行结果: {{{ $ python pcs-216-1.py Client connected! }}} === 建立网络客户端 === 网络服务端的建立过程分为四个阶段,创建Socket对象、连接服务器、数据收发、关闭端口。 分别对应函式 socket.socket()、socket.connect()、socket.sendall()\socket.recv()、socket.close() {{{#!python # coding:utf-8 import socket # 连接本机5678端口,并读取socket,将结果打印屏幕 host = '127.0.0.1' port = 5678 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建采用TCP协议的socket对象 s.connect((host, port)) #连接指定的服务器端 while 1: #从socket读取数据,并输出到屏幕,读完后退出程序 buf = s.recv(2048) if not len(buf): break print buf }}} 运行结果: {{{ ~$ python pcs-216-2.py Welcome to Python World! }}} === Socket异常 === Python的socket模块定义了四种可能出现的异常: 1、socket.error:与一般I/O操作和数据通信问题有关的异常 2、socket.gaierror:与域名解析有关的异常 3、socket.herror:与其他地址解析错误有关的异常 4、socket.timeout:socket调用sockettimeout()函式后,处理超时有关的异常 关于异常处理相见语法篇中异常处理相关章节。 == Socket编程问题 == 1、网络编程过程中的异常处理很重要,既要保证数据的准确性,也不能影响到数据处理的速度。异常处理函式,要有效利用异常信息,和子过程返回信息,准确定位错误,尽可能的解决错误继续程序的运行。如果不行,也得输出或记录详细有用的错误信息。 2、Python提供了很多协议相关的模块,如ftplib、telnetlib、pop等,利用这些库里提供的丰富函式,可以避开具体协议的实现,提高编码效率。Python也提供了访问底层操作系统Socket借口的全部方法,这些接口可以为你提供灵活而强大的功能。当然有时你不得不自己去实现一些协议,可能是处于效率,可能是Python为提供相应的模块。这里(http://code.google.com/p/spyftp 精巧地址:)有一个用Python编写的FTP(File Transfer Protocol)客户端,里边就是调用了ftplib库。实现了所有命令才只有300行代码,不过目前异常处理还不够,如果你愿意也可以帮忙去完善它。 3、Python提供了一个makefile()函式,可以用它来声称供编程人员使用的文件对象,这样对socket的读写就更加方便了。readlines()、write()、read()等函式都可以正常使用。 == 深入Python网络编程 == 考虑本书面向Python入门用户和本人水平,这里所介绍的只是Python网络编程的冰山一脚。如果你对网络编程感兴趣,那么Python的网络编程很值得去深入学习。其灵活多变、功能强大不雅于Perl脚本语言。推荐一本John Goerzen写的《Foundations of Python Network Programming》(中文名:Python网络编程基础)。 ##endInc
2008年10月30日 星期四 17:47
2008/10/30 Jianjun Kong <kongjianjun at gmail.com>: > 考虑到Python网络编程的强大,和这本书的读者类型。这里只对socket模块做简单介绍,从而使读者(Python新手)对Python网络有个初步了解,对后期的深入有一定的帮助。 > 这里涉及 TCP/UDP 等等网络基础概念,建议結合实际应用已经简化模拟来说明, 另外,这是追加的 PCS? 在哪个故事内容处引用出来? 或是哪个PCS 再引用过来? 不能是个悬孤的PCS 哪,,, > 下面内容请审阅。 > --------- > > ##language:zh > #pragma section-numbers off > > ||status|| 草稿 ||孔建军; 90%|| > > [[TableOfContents]] > ##startInc > = PCS216 socket = > == 概述 == > Python中提供了丰富的网络编程模块,适当的调用这些模块可以大大提高编程效率。同时你会惊奇的发现,Python作为脚本语言,对部分网络协议的实现效率相当快。这里介绍的socket模块,是Python网络编程最最基础一个模块。当然在进行网络编程之前你必须对网络基本体系结构和基本原理清楚,在这基础之上如果你做过类似的 > > == 使用 == > === 建立网络服务端 === > 网络服务端的建立过程分为六个阶段,创建Socket对象、绑定端口、监听连接、接受请求、数据收发、关闭端口。 > 分别对应函式 socket.socket()、socket.bind()、socket.listen()、socket.accept()、socket.sendall()\socket.recv()、socket.close() > > {{{#!python > # coding:utf-8 > import socket > # 监听本机5678端口,当有客户端请求时,回复指定字符串 > > host = '127.0.0.1 ' > port = 5678 > > s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) > #采用TCP协议 > s.bind((host, port)) > #绑定socket > s.listen(1) > #服务器监听连接 > > while 1: > #这里的whil循环,可以使程序多地响应多客户端的请求 > clientSocket,clientAddr = s.accept() > #接受客户端连接 > print 'Client connected!' > clientSocket.sendall('Welcome to Python World!') > #向客户端发送字符串 > clientSocket.close() > #关闭与客户端的连接 > }}} > 这里采用的是可靠连接TCP协议,与之相对应的是不可靠的无连接的UDP协议。创建socket对象的协议类型,由socket.socket()的第二个参数决定。socket.SOCK_STREAM代表TCP协议,socket.SOCK_DGRAM代表UDP协议。当然采用不同协议的socket对象的操作函式有些差异,这里列举的两个例子都是采用TCP协议的。 > 运行结果: > {{{ > $ python pcs-216-1.py > Client connected! > }}} > === 建立网络客户端 === > 网络服务端的建立过程分为四个阶段,创建Socket对象、连接服务器、数据收发、关闭端口。 > 分别对应函式 socket.socket()、socket.connect()、socket.sendall()\socket.recv()、socket.close() > > {{{#!python > # coding:utf-8 > import socket > # 连接本机5678端口,并读取socket,将结果打印屏幕 > > host = '127.0.0.1' > port = 5678 > > s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) > #创建采用TCP协议的socket对象 > s.connect((host, port)) > #连接指定的服务器端 > > while 1: > #从socket读取数据,并输出到屏幕,读完后退出程序 > buf = s.recv(2048) > if not len(buf): > break > print buf > }}} > 运行结果: > {{{ > ~$ python pcs-216-2.py > Welcome to Python World! > }}} > === Socket异常 === > Python的socket模块定义了四种可能出现的异常: > > 1、socket.error:与一般I/O操作和数据通信问题有关的异常 > > 2、socket.gaierror:与域名解析有关的异常 > > 3、socket.herror:与其他地址解析错误有关的异常 > > 4、socket.timeout:socket调用sockettimeout()函式后,处理超时有关的异常 > > 关于异常处理相见语法篇中异常处理相关章节。 > > == Socket编程问题 == > > 1、网络编程过程中的异常处理很重要,既要保证数据的准确性,也不能影响到数据处理的速度。异常处理函式,要有效利用异常信息,和子过程返回信息,准确定位错误,尽可能的解决错误继续程序的运行。如果不行,也得输出或记录详细有用的错误信息。 > > 2、Python提供了很多协议相关的模块,如ftplib、telnetlib、pop等,利用这些库里提供的丰富函式,可以避开具体协议的实现,提高编码效率。Python也提供了访问底层操作系统Socket借口的全部方法,这些接口可以为你提供灵活而强大的功能。当然有时你不得不自己去实现一些协议,可能是处于效率,可能是Python为提供相应的模块。这里(http://code.google.com/p/spyftp 精巧地址:)有一个用Python编写的FTP(File Transfer Protocol)客户端,里边就是调用了ftplib库。实现了所有命令才只有300行代码,不过目前异常处理还不够,如果你愿意也可以帮忙去完善它。 > > 3、Python提供了一个makefile()函式,可以用它来声称供编程人员使用的文件对象,这样对socket的读写就更加方便了。readlines()、write()、read()等函式都可以正常使用。 > > == 深入Python网络编程 == > 考虑本书面向Python入门用户和本人水平,这里所介绍的只是Python网络编程的冰山一脚。如果你对网络编程感兴趣,那么Python的网络编程很值得去深入学习。其灵活多变、功能强大不雅于Perl脚本语言。推荐一本John Goerzen写的《Foundations of Python Network Programming》(中文名:Python网络编程基础)。 > > ##endInc > > -- http://zoomquiet.org''' 过程改进乃是催生可促生靠谱的人的组织! PE keeps evolving organizations which promoting people be good!''' [HR]金山软件常年招聘大量Py/C++人才! https://groups.google.com/group/python-cn/web/ot-py-c 简历直投俺就好;-)
2008年10月30日 星期四 20:52
On Thu, Oct 30, 2008 at 05:47:54PM +0800, Zoom.Quiet wrote: >2008/10/30 Jianjun Kong <kongjianjun在gmail.com>: >> 考虑到Python网络编程的强大,和这本书的读者类型。这里只对socket模块做简单介绍,从而使读者(Python新手)对Python网络有个初步了解,对后期的深入有一定的帮助。 >> >这里涉及 TCP/UDP 等等网络基础概念,建议結合实际应用已经简化模拟来说明, >另外,这是追加的 PCS? 在哪个故事内容处引用出来? 另外新建的 PCS 216 我在完善一下,明天把其他引用一起搞好。 >或是哪个PCS 再引用过来? >不能是个悬孤的PCS 哪,,, > >> 下面内容请审阅。 >> --------- >> >> ##language:zh >> #pragma section-numbers off >> >> ||status|| 草稿 ||孔建军; 90%|| .....
2008年10月30日 星期四 22:01
2008/10/30 Jianjun Kong <kongjianjun at gmail.com>: > On Thu, Oct 30, 2008 at 05:47:54PM +0800, Zoom.Quiet wrote: >>2008/10/30 Jianjun Kong <kongjianjun at gmail.com>: >>> 考虑到Python网络编程的强大,和这本书的读者类型。这里只对socket模块做简单介绍,从而使读者(Python新手)对Python网络有个初步了解,对后期的深入有一定的帮助。 >>> >>这里涉及 TCP/UDP 等等网络基础概念,建议結合实际应用已经简化模拟来说明, >>另外,这是追加的 PCS? 在哪个故事内容处引用出来? > > 另外新建的 PCS 216 > 我在完善一下,明天把其他引用一起搞好。 那就得在合适的地方,给出合适的引用理由哪,,, >>或是哪个PCS 再引用过来? >>不能是个悬孤的PCS 哪,,, > > >> >>> 下面内容请审阅。 >>> --------- >>> >>> ##language:zh >>> #pragma section-numbers off >>> >>> ||status|| 草稿 ||孔建军; 90%|| > > ..... > -- http://zoomquiet.org''' 过程改进乃是催生可促生靠谱的人的组织! PE keeps evolving organizations which promoting people be good!''' [HR]金山软件常年招聘大量Py/C++人才! https://groups.google.com/group/python-cn/web/ot-py-c 简历直投俺就好;-)
Zeuux © 2024
京ICP备05028076号