通常在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编程中角色了。
原文链接: https://www.cnblogs.com/dengyigod/archive/2012/07/29/2613749.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/57249
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!