使用Python进行socket编程

上传人:宝路 文档编号:21994486 上传时间:2017-11-25 格式:DOC 页数:20 大小:185.06KB
返回 下载 相关 举报
使用Python进行socket编程_第1页
第1页 / 共20页
使用Python进行socket编程_第2页
第2页 / 共20页
使用Python进行socket编程_第3页
第3页 / 共20页
使用Python进行socket编程_第4页
第4页 / 共20页
使用Python进行socket编程_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《使用Python进行socket编程》由会员分享,可在线阅读,更多相关《使用Python进行socket编程(20页珍藏版)》请在金锄头文库上搜索。

1、使用 Python 进行 socket 编程体验 Python下面我们先对 Python 是什么建立一个直观印象。作为一种解释性语言,Python 很容易使用,并且能够快速验证我们的想法和开发原型软件。Python 程序可以作为一个整体进行解释,也可以一行行地解释。可以在第一次运行 Python 时测试一下下面的 Python 代码,然后一次只输入一行试试。在 Python 启动之后,会显示一个提示符(),可以在这里输入命令。 注意在 Python 中,缩进非常重要,因此代码前面的空格不能忽略:清单 1. 可以试验的几个 Python 例子# Open a file, read each li

2、ne, and print it outfor line in open(file.txt):print line# Create a file and write to itfile = open(test.txt, w)file.write(test linen)file.close()# Create a small dictionary of names and ages and manipulatefamily = Megan: 13, Elise: 8, Marc: 6# results in 8familyElise# Remove the key/value pairdel f

3、amilyElise# Create a list and a function that doubles its input. Map the# function to each of the elements of the list (creating a new# list as a result).arr = 1, 2, 3, 4, 5def double(x): return x*xmap(double, arr)# Create a class, inherit by another, and then instantiate it and# invoke its methods.

4、class Simple:def _init_(self, name):self.name = namedef hello(self):print self.name+ says hi.class Simple2(Simple):def goodbye(self):print self.name+ says goodbye.me = Simple2(Tim)me.hello()me.goodbye()为什么使用 Python?我们要学习和使用 Python 的一个原因是它非常流行。Python 用户的数量以及使用 Python 编写的应用程序的不断增长使这种努力是值得的。在很多开发领域中都可以

5、看到 Python 的踪迹,它被用来构建系统工具,用作程序集成的黏合剂,用来开发 Internet 应用程序和快速开发原型。Python 与其他脚本语言相比也有一定的优势。它的语法非常简单,概念非常清晰,这使得 Python 非常容易学习。在使用复杂的数据结构(例如列表、词典和元组)时,Python 也非常简单,而且可描述性更好。Python 还可以对语言进行扩充,也可以由其他语言进行扩充。我发现 Python 的语法使它比 Perl 的可读性和可维护性更好,但是比 Ruby 要差。与 Ruby 相比,Python 的优点在于它有大量的库和模块可以使用。使用这些库和模块,只需要很少的代码就可以

6、开发功能丰富的程序。Python 使用缩进格式来判断代码的作用域,这有些讨厌,但是 Python 本身的简单性使这个问题已经微不足道了。现在,让我们开始进入 Python 中的 socket 编程世界。Python socket 模块基本的 Python socket 模块Python 提供了两个基本的 socket 模块。第一个是 Socket,它提供了标准的 BSD Sockets API。第二个是 SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。Python 使用一种异步的方式来实现这种功能,您可以提供一些插件类来处理服务器中应用程序特有的任务。表 1 列出了本

7、节所涉及的类和模块。表 1. Python 类和模块 类/模块 说明Socket 低层网络接口(每个 BSD API)SocketServer 提供简化网络服务器开发的类让我们来看一下这些模块,以便理解它们是如何工作的。Socket 模块Socket 模块提供了 UNIX 程序员所熟悉的基本网络服务(也称为 BSD API)。这个模块中提供了在构建 socket 服务器和客户机时所需要的所有功能。这个 API 与标准的 C API 之间的区别在于它是面向对象的。在 C 中,socket 描述符是从 socket 调用中获得的,然后会作为一个参数传递给 BSD API 函数。在 Python 中

8、,socket 方法会向应用 socket 方法的对象返回一个 socket 对象。表 2 给出了几个类方法,表 3 显示了一部分实例方法。表 2. Socket 模块的类方法 类方法 说明Socket 低层网络接口(每个 BSD API)socket.socket(family, type) 创建并返回一个新的 socket 对象socket.getfqdn(name) 将使用点号分隔的 IP 地址字符串转换成一个完整的域名socket.gethostbyname(hostname) 将主机名解析为一个使用点号分隔的 IP 地址字符串socket.fromfd(fd, family, typ

9、e) 从现有的文件描述符创建一个 socket 对象表 3. Socket 模块的实例方法 实例方法 说明sock.bind( (adrs, port) ) 将 socket 绑定到一个地址和端口上sock.accept() 返回一个客户机 socket(带有客户机端的地址信息)sock.listen(backlog) 将 socket 设置成监听模式,能够监听 backlog 外来的连接请求sock.connect( (adrs, port) ) 将 socket 连接到定义的主机和端口上sock.recv( buflen, flags ) 从 socket 中接收数据,最多 buflen

10、个字符sock.recvfrom( buflen, flags ) 从 socket 中接收数据,最多 buflen 个字符,同时返回数据来源的远程主机和端口号sock.send( data, flags ) 通过 socket 发送数据sock.sendto( data, flags, addr ) 通过 socket 发送数据sock.close() 关闭 socketsock.getsockopt( lvl, optname ) 获得指定 socket 选项的值sock.setsockopt( lvl, optname, val ) 设置指定 socket 选项的值类方法 和 实例方法

11、之间的区别在于,实例方法需要有一个 socket 实例(从 socket 返回)才能执行,而类方法则不需要。SocketServer 模块SocketServer 模块是一个十分有用的模块,它可以简化 socket 服务器的开发。有关这个模块的使用的讨论已经远远超出了本教程的范围,但是我将展示一下它的基本用法,然后您可以参阅 参考资料 一节中给出的链接。考虑清单 2 中给出的例子。此处,我们实现了一个简单的 “Hello World” 服务器,当客户机连接它时,它就会显示这样一条消息。我首先创建一个请求处理程序,它继承了 SocketServer.StreamRequestHandler 类。

12、我们定义了一个名为 handle 的方法,它处理服务器的请求。服务器所做的每件事情都必须在这个函数的上下文中进行处理(最后,关闭这个 socket)。这个过程的工作方式非常简单,但是您可以使用这个类来实现一个简单的 HTTP 服务器。在 handle 方法中,我们打一个招呼就退出了。现在连接处理程序已经准备就绪了,剩下的工作是创建 socket 服务器。我们使用了 SocketServer.TCPServer 类,并提供了地址和端口号(要将服务器绑定到哪个端口上)以及请求处理方法。结果是一个 TCPServer 对象。调用 serve_forever 方法启动服务器,并使其对这个连接可用。清单

13、 2. 用 SocketServer 模块实现一个简单的服务器import SocketServerclass hwRequestHandler( SocketServer.StreamRequestHandler ):def handle( self ):self.wfile.write(Hello World!n)server = SocketServer.TCPServer( (, 2525), hwRequestHandler )server.serve_forever()就是这样!Python 允许这种机制的任何变种,包括 UDPServers 以及派生进程和线程的服务器。请参阅 参

14、考资料 一节中更多信息的链接。在所有具有 socket 的语言中,socket 都是相同的 这是两个应用程序彼此进行通信的管道。前提条件不管是使用 Python、Perl、Ruby、Scheme 还是其他有用的语言(此处 有用 的意思是这种语言有 socket 接口)来编写 socket 程序,socket 通常都是相同的。这是两个应用程序彼此进行通信的管道(这两个应用程序可以在同一台机器上,也可以位于两台不同的机器上)。使用 Python 这种具有 socket 编程功能的语言的区别在于,它有一些辅助的类和方法,可以简化 socket 编程。在本节中,我们将展示 Python 的 socke

15、t API。可以使用一个脚本来执行 Python 的解释器,如果您要自己执行 Python,就可以一次只输入一行代码。这样,就可以看到每个方法调用之后的结果了。下面这个例子展示了如何与 Python 解释器进行交互。此处我们使用了 socket 类方法 gethostbyname 将一个完整的域名()解析成一个使用点号分隔的 IP 地址字符串(129.42.19.99):清单 3. 从解释器命令行中使用 socketcamus$ pythonPython 2.4 (#1, Feb 20 2005, 11:25:45)GCC 3.2.2 20030222 (Red Hat Linux 3.2.2

16、-5) on linux2Type help, copyright, credits or license for moreinformation. import socket socket.gethostbyname()129.42.19.99在导入 socket 模块之后,我调用了 gethostbyname 类方法将这个域名解析成 IP 地址。现在,我们要讨论基本的 socket 方法,并通过 socket 进行通信。您应该熟悉 Python 解释器。创建和销毁 socket要新创建一个 socket,可以使用 socket 类的 socket 方法。这是一个类方法,因为还没有得到可以应用方法的 socket 对象。socket 方法与 BSD API 类似,下面是创建流(TCP) socket 和数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号