向大侠们请教,Python可以直接创建原始套接字吗

jackyu020621 2010-04-05 10:07:10
向大侠们请教,Python可以直接创建原始套接字吗
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2010-04-05
  • 打赏
  • 举报
回复
http://download.csdn.net/source/1896179
fibbery 2010-04-05
  • 打赏
  • 举报
回复
去精华区找找看,有没有Python网络编程。
fibbery 2010-04-05
  • 打赏
  • 举报
回复
Python 套接字

  让我们先来考察一下原始 Python 套接字。因为没有协议开销(除了您自己添加的东西外),所以您可以认为这在您的控制下。这是有关原始套接字编程的优点;缺点是您将需要担心许多其他重要的问题,例如:

  需要开发和维护的代码多得多。

  连接过程中缺乏数据完整性(尽管单 CORBA 提供的就不止 TCP 本身)。

  低级别的错误状态(即,错误的消息协议、连接断开)。

  那么,让我们来看看应用程序吧。这个应用程序的所有示例代码都可以在 此处获得。您在下载了压缩文档并对其进行解压缩后,您将拥有四个子目录。我们要看的第一个子目录名为 python 。为 TCP 通信编写您自己的协议的好处之一就是,您无需安装额外的第三方库。这可以最大限度地降低分发包给您带来的困扰。

  在示例分发包中,文件 python/server.py 是您将用来接收原始 TCP 请求的服务器。它建立在 Python 自带的标准的 SocketServer 模块的基础上。在您考察代码时,要注意几件事情。第一件事情是要进行绝对无错检查。对于每种消息类型(以及对于不存在的消息类型),客户机都需要彻底检查从服务器接收的每个字节。第二件要注意的事情是处理程序被设计成处理单个请求。当您开始非常快速地发送许多整数时,因为客户机将不得不为它发送的每个整数创建一个新的连接,所以这样的设计将使您的小套接字服务器处于不利的境地。您本来可以将这台服务器编写成在单个连接中处理多个请求,但是那样您将不得不以 start 消息和 stop 消息的形式向您的服务器添加额外的消息类型支持,以便服务器知道何时停止侦听连接。对于这个服务器文件最后一件要注意的事情就是没有任何形式的连接超时。按照这台服务器配置的方式,一台恶意的客户机可以连接到这台服务器上,并且可以发送一个非常大的字符串,结果将使整个服务器瘫痪。

  要启动服务器,只需在一个窗口中执行 server.py 脚本即可,然后立即执行名为 time-client.py 的测试客户机。这将把时间开销信息打印到执行了客户机脚本的终端。客户机完成任务后,您就可以按 Ctrl-C 停止服务器。要测试消息开销,您要使用 tcpdump ;在第三个窗口中运行它,然后运行脚本 size-client.py (此时服务器仍在运行中)。这两个脚本的运行结果如下面的表 1 所示。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧