在进行网络编程之前,先对网络以及互联网协议做一个了解。

推荐阮一峰的博客:(感谢)

http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

--再去看一遍先--

--看完了--

16.1引言

客户端、服务器架构

服务器是一个软件或者硬件,用来想一个或多个客户端提供所需要的“服务”。其中,硬件是指打印机、文件服务器等。软件服务器提供的服务主要是程序的运行、数据的发送与接收、合并、升级、或其他的程序或数据操作。软件服务器有Web服务器、数据库服务器、窗口服务器等。

对于服务器而言,在提供服务之前需要进行一些设置。先要创建一个通讯端点,让服务器能够“监听”请求,然后需要将统一资源定位符(URL)在网络上广而告之,然后就可以提供服务了。

16.2套接字:通讯端点

1、什么是套接字

源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。是一种具有“通讯端点”概念的计算机网络数据结构。

套接字可以分为基于文件型和基于网络型。基于文件型的用来处理同一台主机上的程序(文件)之间的通讯。而网络型就是来处理网络之间的通讯的。

2、套接字地址:主机与端口

一个因特网地址由网络通讯所必需的主机与端口组成。合法的端口范围为0-65535,小于1024的用来作为系统端口,所以自己定义的(应用软件)端口只能是大于1024的。常用的端口号列表:http://www.iana.org/assignments/port-numbers

3、面向连接与无连接

套接字的类型只有两种:面向连接和无连接。

面向连接:也称“流套接字”(SOCK_STREAM)。在通讯之前先建立连接。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

无连接:即无需建立连接就进行通讯。就像邮政服务一样,数据的发送顺序和接收顺序关系不大,并且可能还收不到(中国邮政?)。那么,它的优点是没有建立连接的资源消耗。实现这种连接的是用户数据报协议(UDP)(SOCK_DGRAM)。

上面两种套接字使用网际协议(IP)来查找网络中的主机,这样形成的系统有两个协议组合来描述,TCP/IP和UDP/IP。

16.3Python中的网络编程

主要是stock模块的应用。

写一段TCP协议代码。

服务器端:

#-*- coding:utf-8 -*-
from socket import *
from time import ctime HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT) #首先是创建套接字对象
tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5) #最多有多少个连接同时接进来 while True:
print 'wating for connection...'
tcpCliSock,addr = tcpSerSock.accept()
print '...connected from:',addr while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send('[%s] %s' % (ctime(),data))
tcpCliSock.close() tcpSerSock.close()

客户端:

#-*- coding:utf-8 -*-
from socket import *
import time HOST = "localhost"
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT) tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR) while True:
data = 'hepeng' if not data:
break
tcpCliSock.send(data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data
time.sleep(10) tcpCliSock.close()

16.4 SocketServer模块

SocketServer 是标准库中一个高级别的模块。用于简化实现网络客户端与服务器所心需的大量样板代码。该模块中,已经实现了一些可供使用的类。

服务器端:

#-*- coding:utf-8 -*-
from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)
from time import ctime HOST = ''
PORT = 21567
ADDR = (HOST,PORT)
#print dir(SRH) #看一下有哪些属性和方法
class MyReqyestHandler(SRH):
"""docstring for MyReqyestHandler"""
def handle(self):
print '...connected from:',self.client_address
self.wfile.write('[%s] %s' % (ctime(),self.rfile.readline())) tcpServ = TCP(ADDR,MyReqyestHandler)
print 'waiting for connection...'
tcpServ.serve_forever()

客户端:

#-*- coding:utf-8 -*-

from socket import *
import time HOST = "localhost"
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)
#注意这里的处理方式与前面的不同了,每次都需要进行新的socket对象定义,这样就是每次循环都会再与服务器连接一次
while True:
tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
data = 'hepeng' if not data:
break
tcpCliSock.send('%s\r\n' % data) #我们使用的处理器类像文件一样操作套接字,所以我们每次都要发送行结束字符(回车与换行〉
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data.strip()
time.sleep(10)
tcpCliSock.close()

16.5 Twisted框架

Twisted 是一个完全事件驱动的网络框架。它允许你使用和开发完全异步的网络应用程序和协议。它为你创建一个完整系统提供了很大的帮助。系统中可以有:网络协议、线程、安全和认证、聊天/即时通讯、数据库管理、关系数据库集成、Wed/Internet、电子邮件、命令行参数、图形界面集成等。

推荐博客:

http://blog.sina.com.cn/s/blog_704b6af70100py9f.html

《python核心编程》读书笔记--第16章 网络编程的更多相关文章

  1. javaSE学习笔记(16)---网络编程

    javaSE学习笔记(16)---网络编程 基本概念 如今,计算机已经成为人们学习.工作.生活必不可少的工具.我们利用计算机可以和亲朋好友网上聊天,也可以玩网游.发邮件等等,这些功能实现都离不开计算机 ...

  2. [CSAPP笔记][第十一章网络编程]

    第十一章 网络编程 我们需要理解基本的客户端-服务端编程模型,以及如何编写使用因特网提供的服务的客户端-服务端程序. 最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web服务器,能够为真 ...

  3. 《Clojure编程》笔记 第2章 函数式编程

    目录 背景简述 第2章 函数式编程 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的.坊间传闻:通常情况下,最好是有一定Jav ...

  4. 《Clojure编程》笔记 第16章 Clojure与web

    目录 背景简述 第16章 Clojure与web 16.1 术语 16.2 Clojure栈 16.3 基石:Ring 16.3.1 请求与应答 16.3.2 适配函数 16.3.3 处理函数 16. ...

  5. C++ primer plus读书笔记——第16章 string类和标准模板库

    第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string ...

  6. 20191105 《Spring5高级编程》笔记-第16章

    第16章 Web应用程序 16.3 MVC和Spring MVC介绍 16.3.3 Spring MVC WebApplicationContext层次结构 在Spring MVC中,Dispatch ...

  7. 《python核心编程》--读书笔记 第21章 数据库编程

    准备:今天拿笔记本装了mysql,这样就能在不同地方用其他电脑远程访问同一个数据库了. python安装MySQLdb模块:http://www.codegood.com/downloads. 21. ...

  8. 《python核心编程》读书笔记--第18章 多线程编程

    18.1引言 在多线程(multithreaded,MT)出现之前,电脑程序的运行由一个执行序列组成.多线程对某些任务来说是最理想的.这些任务有以下特点:它们本质上就是异步的,需要多个并发事务,各个事 ...

  9. WCF服务编程 读书笔记——第1章 WCF基础(2)

    续:第1章 WCF基础(1) 元数据交换 服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据, 另一种则是后面将要讨论的使用专门的终结点的方式.WCF能够为服务自动提供基于H ...

随机推荐

  1. 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

    表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...

  2. zabbix监控windows主机网卡流量

    监控windows主机网卡流量 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.     欢迎加入:高级运维工程师之路 598432640 客户端配置:(172.30.1.120,wi ...

  3. Smarty模板

    Smarty模板 是做什么用的?? 是将前端的显示和后台的逻辑进行分离,就相当于把前台显示的页面和后台要实现的某些功能的逻辑给分离出来了,分离在两个文件里,也就是说,前端只负责显示,后端只负责逻辑操作 ...

  4. 结合DDE指标来分析成本分布的重要作用

    筹码分布集中度90和70是什么意思? (2015-08-14 12:12:27) 转载▼ 标签: 股票 分类: 成交量能.筹码分析   那个集中度90,和集中度70,90和70是什么意思??集中度最大 ...

  5. Codeforce Round #216 Div2

    e,还是写一下这次的codeforce吧...庆祝这个月的开始,看自己有能,b到什么样! cf的第二题,脑抽的交了错两次后过了pretest然后system的挂了..脑子里还有自己要挂的感觉,果然回头 ...

  6. WebDriver:org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms

    今天尝试最新的webDriver与fireFox搭配: 运行代码时出现如下的问题,但是浏览器却可以打开: org.openqa.selenium.firefox.NotConnectedExcepti ...

  7. 夺命雷公狗---node.js---12之fs模块文件的操作

    node比客户端浏览器的js强的地方之一就是他的文件操作模块,可以直接对系统的文件进行操作 再打开来看下是否发生了变化,由此可见node的强大的地方了.. 实际代码如下所示: /** * Create ...

  8. RMB转换人民币大小金额

    MXS&Vincene  ─╄OvЁ  &0000015 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...

  9. linux_c学习笔记之curl的使用一

    参考文档 使用libcurl发送PUT请求上传数据以及DELETE请求删除数据 http://blog.163.com/lixiangqiu_9202/blog/static/535750372014 ...

  10. 匹配表单中所有的子级input元素。

    HTML 代码: <form> <label>Name:</label> <input name="name" /> <fie ...