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编程中角色了。

 

posted @ 2012-07-29 02:03  dengyigod  阅读(221)  评论(0编辑  收藏  举报