首页 > 代码库 > python进阶九_网络编程(一)

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

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 SecurityTLS)是为网络通信提供安全及数据完整性的一种安全协议。TLSSSL在传输层对网络连接进行加密。

IRC:IRCInternet Relay Chat 的英文缩写,中文一般称为互联网中继聊天。它是由芬兰人Jarkko Oikarinen1988年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过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的官方文档,官方文档大体是这么个意思,就是说,从Python2Python3的演变时,套接字传送的数据全部转变成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对于网络这一块很是方便,但是学起来还是感觉问题多多,突然发现天亮了,好累,睡觉去了