python的网络编程
最近在看<python应用核心编程第三版>英文原版, 不是想装逼, 是真没有中文版...感觉看原版也不是很累, 这里是我关于网络编程这一章的学习笔记.
概念
概念这个东西, 一般是没有人认真去看的. 但我觉得挺重要, 对软件相关的知识更是关键.
这本书用了挺大的篇幅来介绍服务器/客户端结构. 涉及很多种服务器/客户端模式, 总体包括硬件和软件两大种. 作者打了一个很好的比方, 把这种结构比作是银行前台和客户. 前台处于一种一直ready的状态, 客户一个接一个排队来办业务, 前台一个一个处理. 如果处理完一个客户, 暂时没有其他客户, 那TA也不能休息, 一直等着下一个客户的光临, 真tmd一个劳模啊. 服务器就是这个nb劳模, 而客户呢当然就是客户端.
对于网络编程中的服务器/客户端结构, 在一切ready之前, 首先得有个环境搭建的过程. 这个过程最重要的部分是要建一个communication endpoint.
这个endpoint可以理解为一个公司的前台接待或者是转接员, 主要是接听主线上的电话. 就像早些年一栋楼就一个电话, 你想给谁打最先接到的是门卫大妈, 告她找谁谁, 然后她帮你喊. 接下来要引入的重要角色socket呢, 就是这个大妈.
再来个生动的比喻, 如果说socket是电话上电话线的接口来保证通信, 那么Host和port这一对儿就是区号和电话号码. 你要没有这两个就算电话线插出花来, 也还是通信不了.
然后就是TCP和UDP. TCP属于connection-oriented的连接方式, UDP则属于connectionless的. 两者的关系和区别地球人儿基本都知道, 要不知道问下度娘. 这里要强调一下的是TCP也叫stream socket, UDP也叫datagram socket.
在python中的网络编程
python中有关网络编程的模块是socket, 建立socket的方法是socket.socket().
初始化一个TCP/IP和UDP/IP类型的socket:
import socket
# 注意tcp也叫steam socket, 所以第二个参数是SOCK_STREAM(内置变量)
# 至于第一个参数是表明socket family的, 我们这里基本上就是AF_INET了.
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# udp的别名叫datagram, 所以第二个参数是SOCK_DGRAM
udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
to be continued...