学习Python网络编程基础
Foundations of Python Network Programming,the 2nd Edition学习笔记
Chapter 1 C/S网络
这一章首先介绍了virtualenv的使用:于是这里首先简要介绍一下virtualenv的用处
virtualenv 用来创建隔离的Python环境。处理python环境的多版本和模块依赖,以及相应的权限是一个很常见的问题。比如,你有个应用使用的是LibFoo V1.0,但另一个应用却要用到LibFoo V2.0。 如何处理呢?如果把所有模块都安装到 /usr/lib/python2.7/site-packages (或是你本机python默认的模块安装目录),那你极有可能无意中升级一些不该升级的模块。更普遍的是,就算你成功安装了某个应用,那么接下来又会怎样?只要它开始运行了,那么只要其所依赖的模块发生任何改动,亦或升级,都可能打断该应用。这还没完,要是你无法在 site-packages 目录下安装模块呢?比如共享主机。
上述这几种场合都适用 virtualenv 。它会创建一个拥有独立安装目录的python环境,该隔离环境不会与其他virtualenv环境共享模块(可选择是否访问全局库目录)。
可从https://pypi.python.org/pypi/virtualenv上下载,对于windows OS,直接在命令行运行python setup.py install就可以实现安装
下面讲一下如何使用:直接在命令行执行python virtualenv.py ENV,
该操作会创建 ENV/lib/pythonX.X/site-packages 目录 和 ENV/bin/python , 前者用来存放要安装的模块,后者就是隔离环境的Python解释器。 在virtualenv环境下使用此解释器(包括以#!/path/to/ENV/bin/python 开头的脚本)时,使用的都是隔离环境下的模块。
该操作还在隔离环境下安装了 Setuptools 或 distribute 。要用Distribute取代setuptools的话,只要运行:
$ python virtualenv.py --distribute ENV
设置环境变量 VIRTUALENV_USE_DISTRIBUTE 也能达到同样目的。新的virtualenv还包含了 pip 包管理器,可以直接用 ENV/bin/pip 安装第三方模块。详细内容可参见https://virtualenv-chinese-docs.readthedocs.org/en/latest/#wrongway
1.TCP基础
TCP/IP是一些协议(protocols)的合集。Internet是在一些共享的线路上发送数据的。为实现共享,TCP是通过把要发送的数据流分解成很多小信息包在Internet上传输的(也许还伴有其他程序的信息包),这些信息包到达接收者的地方会再次重新合成在一起。这样就可以节省发送时间。
IP--代表地址(机器的唯一性) TCP——使用端口号(程序的唯一性)
每个TCP连接的端点都是由一个IP地址和一个端口号来唯一标识的
Client/Server模式:
2.Python网络编程:大致有两种情况:1.利用python中已有的一些协议模块来写2.自己写协议
以程序来说明:
Client code:
1 # Simple Gopher Client - Chapter 1 - gopherclient.py 2 3 import socket, sys 4 5 port = 70 6 host = sys.argv[1] 7 filename = sys.argv[2] 8 9 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10 s.connect((host, port)) 11 12 s.sendall(filename + "\r\n") 13 14 while 1: 15 buf = s.recv(2048) 16 if not len(buf): 17 break 18 sys.stdout.write(buf) 19
Server code: