PythonTip >> 博文 >> python

python进阶九_网络编程(一)

zihua 2014-05-15 15:05:19 点击: 1620 | 收藏


Python 网络编程一

一.一些基本概念

Python 网络编程这一节中会涉及到很多网络相关的术语,对于一些最基本的概念,如 TCP/IP,Socket 等等不再赘述,不明白的可以自己去查一查,对于一些常见但是可能不是很熟悉的术语这里做了一个简要的介绍,后续遇到不会因此止步。

SNTP : 简单网络时间协议 (Simple Network Time  Protocol) 简单来说就是用来同步因特网中的计算机时钟,需要注意的是这里的 SNTP 是用户数据报 (UDP) 协议。

MIME :Multipurpose Internet Mail Extensions) 多用途互联网邮件扩展类型,就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

POP3 : 邮件协议的第三个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准, POP3 协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而 POP3 服务器则是遵循 POP3 协议的接收邮件服务器,用来接收电子邮件的。 POP3 协议是 TCP/IP 协议族中的一员,由 RFC 1939  定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件

SSL : 安全套接层 (Secure Sockets Layer ), 及其继任者传输层安全( Transport Layer Security TLS )是为网络通信提供安全及数据完整性的一种安全协议。 TLS SSL 在传输层对网络连接进行加密。

IRC :IRC Internet Relay Chat  的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人 Jarkko Oikarinen 1988 年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过 60 个国家提供了 IRC 的服务。 IRC 的工作原理非常简单,您只要在自己的 PC 上运行客户端软件,然后通过因特网以 IRC 协议连接到一台 IRC 服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为 \"Channel\" (频道)的地方就某一话题进行交谈或密谈。每个 IRC 的使用者都有一个 Nickname (昵称)。

LDAP :LDAP 是轻量目录访问协议,英文全称是 Lightweight Directory Access Protocol ,一般都简称为 LDAP 。它是基于 X.500 标准的,但是简单多了并且可以根据需要定制。与 X.500 不同, LDAP 支持 TCP/IP ,这对访问 Internet 是必须的。 LDAP 的核心规范在 RFC 中都有定义,所有与 LDAP 相关的 RFC 都可以在 LDAPman RFC 网页中找到 .

二.简单的 Socket 通信

首先我们来看一个简单的示例:



在这个示例中,有几点需要说明一下:

1.这个示例中无论是在服务器端还是客户端都频繁使用了 encode() decode() 转码和解码,这是很必要的,否则会出现 TypeError:'str' does not support the buffer interface 至于原因,可以查看一下 Python3 的官方文档,官方文档大体是这么个意思,就是说,从 Python2 Python3 的演变时,套接字传送的数据全部转变成 Byte 类型了,也即:

socket.send(bytes[, flags])  形参为字节类型

socket.recv(bufsize[, flags]) Receive datafrom the socket. The return value is a bytes object representing the data received.

所以需要用 encode() decode() 转码和解码,至于 encode() decode() ,官方给出的解释是这样的:

Codec.encode(input[, errors])

Encodes the object input and returns atuple (output object, length consumed). Encoding converts a string object to abytes object using a particular character set encoding

Codec.decode(input[, errors])

Decodes the object input and returns atuple (output object, length consumed). Decoding converts a bytes objectencoded using a particular character set encoding to a string object.

input must be a bytes object or one whichprovides the read-only character buffer interface  –  for example, buffer objectsand memory mapped files

这里官方的解释应该算是很明了了吧。

2.刚刚的示例中使用的是用户数据报协议 (UDP), 并不关心可靠性,还有一种可靠协议 TCP/IP, 我们也来试一下:



三.一些常见的 Socket 运用

1.邮件发送

在邮件发送这一块,我试了很多次邮箱,发现 163 的邮箱一次成功,但是 QQ 邮箱总是登陆不上,花了好长时间都没找到原因,头有点晕了。。。还希望有过了解的朋友能够指点一二。但平时用的最多的还是 qq 邮箱和 gmail 邮箱,前者行不通就试了一下后者,发现效果还挺好的,如下:

我们来看一下结果:

我们来看一下结果:

虽然 Python 对于网络这一块很是方便,但是学起来还是感觉问题多多,突然发现天亮了,好累,睡觉去了

原文链接:http://www.tuicool.com/articles/6RBVzaq

作者:zihua | 分类: python | 标签: python | 阅读: 1620 | 发布于: 2014-05-15 15时 |