• w


    通常在Python中要进行网络编程需要import Socket模块。有了这个模块之后,你可以做所有你需要做的有关socket编程的问题。

    在C/C++网络编程中,我们需要引入下面几个头文件:

    #include   <sys/types.h>   
    #include   <sys/socket.h>   
    #include   <netinet/in.h>   
    #include   <arpa/inet.h> 

    在Python网络编程中:

    import Socket.

    在Python,Lib文件夹下有Socket.py文件。里面可以看到基本没有你平常用到的那些命令,而是一些平常基本上用不到的有关Socket命令。自然我们就想到了这个文件中引入的一个包:

    import _socket

    这不是一个普通的py模块(虽然也是),它应该是通过Python扩展,也就是将使用C/C++编写的函数库(dll)文件扩展层Python的模块(或者类似方法)。如果在查看_socket中的那些名字,你会发现,它基本包含了大多数的我们编辑socket程序所要使用的socket所有东西。

    其实,也可以像想的。操作系统以及tcp/ip协议栈最初甚至是现在的实现基本是基于C/C++的,不管是在linux上还是在其他的操作系统上(不够准确),我们的Python语言想要调用协议栈上面的socket接口,只能是通过将那些协议栈的通用接口转换的自己的扩展,然后才能使用。

    也就是说,可以怎么思考,操作系统(和协议栈)像外提供的统一的socket编程接口。这个接口不因不同的语言和环境变化(可能它本身是用C实现的),然后呢!各个语言想要使用这个接口的话,就需要通过他们各自的自己的扩展技术,封装转换那个统一的编程接口使其符合自己的语言风格。

    _socket.lib在python中就是一个这样的东西。但是呢,python做了进一步的封装。使用python的标准模块技术包装_socket.lib的全部功能(基本上全部直接使用而已),而结果就是那个不怎么打的socket.py文件。

    这样做的原因是什么?

    (1)第一,对用户屏蔽,让你感觉不到这个socket编程接口是扩展而来的。好像是python一个普通的模块而已。

    (2)第二,根据python,语言的特点,协同其他的模块,增加提供其他的功能。让用户使用更为方便。

    所以你会发现,除了Socket.py模块中新添加的那些(我们平常不怎么使用的)功能,所有的socket编程接口和在C/C++中是差不多的。(因为大部分是对统一的socket接口进行了python扩展而已)

    所以从这个角度上讲,网络编程(socket)基本上对于所有语言都是一个原理,因为基本上他们都想python那样使用了一个统一的接口,然后做了基于自己语言的转换封装。

    /Lib/socket.py的大致内容:

    首先是引入文件:

    import _socket
    from _socket import *     #这个是本文件的核心
    from functools import partial
    from types import MethodType

    有关_ssl的引入     #这里有一大段代码,主要是解决,没有_ssl这个模块怎么办?

                        我们知道ssl是建立在传输层之上的用于加强传输层安全的协议

    import os, sys, warnings  #相关的系统引入

    try:
        from cStringIO import StringIO
    except ImportError:
        from StringIO import StringIO

    try:
        import errno
    except ImportError:
        errno = None

    接下来的定义的一些类,方法,变量以及一些处理,基本上没有我们通常不会使用,意思就是说我们通常使用的仍然是从

    from _socket import * 

    引入进行来的相关内容,也就是标准socket接口的内容。

    对于socket.py中的其它余下来的内容可以用一个很有代表性的函数来说明:

    def create_connection(address, timeout=_GLOBAL_DEFAULT_TIMEOUT,
                          source_address=None):

    这个函数定义了一个简便的建立socket连接的方法,它的内容就是那些标准的建立socket连接的过程。这从这个函数就可以看出socket.py在pythonsocket编程中角色了。

  • 相关阅读:
    performance benchmark : memcached vs Kyoto Tycoon
    Adhesive框架系列文章应用程序信息中心模块实现
    神奇的Redis
    使用代码测试ASP.NET MVC2执行流程
    linq2sql代码大全
    7/17博客园活动浅谈网站架构中缓存的应用所有资料
    浅谈.NET下的多线程和并行计算(十四)并行计算前言
    公司.NET 3.5培训资料分享
    mongodb分片集群(sharding with replica set)配置
    mongodb有关的研究
  • 原文地址:https://www.cnblogs.com/dengyigod/p/2613749.html
Copyright © 2020-2023  润新知