免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3476 | 回复: 0
打印 上一主题 下一主题

[转]基本的 Python socket 模块 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-21 19:46 |只看该作者 |倒序浏览

基本的 Python socket 模块
Python 提供了两个基本的 socket 模块。第一个是 Socket,它提供了标准的 BSD Sockets API。第二个是
SocketServer
,它提供了服务器中心类,可以简化网络服务器的开发。Python 使用一种异步的方式来实现这种功能,您可以提供一些插件类来处理服务器中应用程序特有的任务。表 1 列出了本节所涉及的类和模块。

  • 表1. Python 类和模块

类/模块
说明
Socket
低层网络接口(每个 BSD API)
SocketServer
提供简化网络服务器开发的类
让我们来看一下这些模块,以便理解它们是如何工作的。
socket 模块
Socket 模块提供了 UNIX 程序员所熟悉的基本网络服务(也称为 BSD API)。这个模块中提供了在构建 socket 服务器和客户机时所需要的所有功能。
这个 API 与标准的 C API 之间的区别在于它是面向对象的。在C中,socket描述符是从socket调用中获得的,然后会作为一个参数传递给BSD API函数。在Python中,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, type)
从现有的文件描述符创建一个 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 个字符
sock.recvfrom( buflen[, flags] )
从 socket 中接收数据,最多 buflen 个字符,同时返回数据来源的远程主机和端口号
sock.send( data[, flags] )
通过 socket 发送数据
sock.sendto( data[, flags], addr )
通过 socket 发送数据
sock.close()
关闭 socket
sock.getsockopt( lvl, optname )
获得指定 socket 选项的值
sock.setsockopt( lvl, optname, val )
设置指定 socket 选项的值
类方法和实例方法之间的区别在于,实例方法需要有一个socket实例(从socket返回)才能执行,而类方法则不需要。
SocketServer 模块
SocketServer
模块是一个十分有用的模块,它可以简化socket服务器的开发。有关这个模块的使用的讨论已经远远超出了本教程的范围,但是我将展示一下它的基本用法,然后您可以参阅参考资料一节中给出的链接。
考虑清单 2 中给出的例子。此处,我们实现了一个简单的 “Hello World” 服务器,当客户机连接它时,它就会显示这样一条消息。我首先创建一个请求处理程序,它继承了
SocketServer
.
StreamRequestHandler
类。我们定义了一个名为 handle 的方法,它处理服务器的请求。服务器所做的每件事情都必须在这个函数的上下文中进行处理(最后,关闭这个 socket)。这个过程的工作方式非常简单,但是您可以使用这个类来实现一个简单的 HTTP 服务器。在 handle 方法中,我们打一个招呼就退出了。
现在连接处理程序已经准备就绪了,剩下的工作是创建 socket 服务器。我们使用了
SocketServer
.TCPServer 类,并提供了地址和端口号(要将服务器绑定到哪个端口上)以及请求处理方法。结果是一个 TCPServer 对象。调用 serve_forever 方法启动服务器,并使其对这个连接可用。


  • 清单 2. 用
    SocketServer
    模块实现一个简单的服务器

Toggle line numbers

Toggle line numbers
  1 import SocketServer
2
3 class hwRequestHandler( SocketServer.StreamRequestHandler ):
4  def handle( self ):
5  self.wfile.write("Hello World!\n")
6
7
8 server = SocketServer.TCPServer( ("", 2525), hwRequestHandler )
9 server.serve_forever()
就是这样!Python 允许这种机制的任何变种,包括 UDPServers 以及派生进程和线程的服务器。请参阅 参考资料一节中更多信息的链接。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/60332/showart_2127355.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP