网络编程socket-SocketServer-FTP
16章 网络编程
?应该是讲网络之间如何编程来进行通信的章节
16.1.1 客户端/服务器架构
?客户端请求访问,服务器端监听请求,处理请求,进行相应的模式
16.1.2 客户端/服务器编程
?服务器端:创建通讯端点,以用来监听。并将自身位置确定,既URL
客户端:创建通讯端点,建立到服务器的连接
16.2 套接字:通讯断点
?是一种通讯必需的网络数据结构,就像电话接口,它是一种数据接口
套接字地址:套接字要有主机地址和端口(0-65535)
套接字类型:
面向连接:通信前要建立一条连接:实现的协议时TCP
无连接:实现的协议时UDP
它们这些套接字都是使用IP协议来在网络中寻找主机。
16.3 使用python来实现网络编程通信
16.3.1 socket()模块
?socket.socket()函数可以创建套接字
分别建立TCP/IP,UDP/IP的套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 第一个是家族协议,它们都是网络的。第二个是面向类型
udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
16.3.2 套接字方法
?创建套接字后,要用它具有的方法来进行通信
16.3.3 创建一个TCP服务器
思路:创建套接字---绑定套接字到一个本地地址---监听连接---无限循环接听TCP客户端请求(接收到后会返回客户端套接字)---接受TCP数据---发送TCP数据---关闭子套接字---关闭服务器套接字
from socket import *
from time import ctime
HOST = '' # 表示可以绑定任何有效地址
PORT = 2157
BUFSIZ = 1024 # 关键字,大小为1k
ADR= (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM) # 创建基于网络的、TCP服务器套接字
tcpSerSock.bind(ADR)
tcpSerSock.listen(5) # 只允许5个连接同时
while True: # 无限循环接听
print 'waiting for connecttion....'
tcpCliSock, addr = tcpSerSock.accept() # 接收,并将客户端套接字、客户端地址保存
print '...conneted from:', addr
while True:
data = tcpCliSock.recv(BUFSIZ) # 读取缓冲区的数据
if not data:
break
tcpCliSock.send('{0} {1}' .format(ctime(), data)) #发送给客户端信息
tcpCliSock.close()
tcpSerSock.close()
16.3.4 创建TCP客户端
思路:创建客户端套接字---进行连接---发送数据(发送为空就退出)---从缓冲区接收数据(接收失败就退出)---关闭客户端套接字
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = raw_input('>')
if not data:
break
tcpCliSock.send(data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data
tcpCliSock.close()
16.3.6 创建一个UDP服务器
思路:创建套接字---绑定套接字到一个本地地址--接收数据---发送数据
from socket import *
from time import ctime
HOST = '' # 表示可以绑定任何有效地址
PORT = 2157
BUFSIZ = 1024 # 关键字,大小为1k
ADR= (HOST, PORT)
udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADR)
while True:
print 'waiting for message...'
data, addr = udpSerSock.recvfrom(BUFSIZ)
udpSerSock.sendto('{0} {1}' .format(ctime(), data), addr)
print '...received from and returned to:', addr
udpSerSock.close()
16.3.7 创建一个UDp客户端
思路:创建客户端套接字---发送数据---接收数据
from socket import *
from time import ctime
HOST = 'localhost' # 表示可以绑定任何有效地址
PORT = 2157
BUFSIZ = 1024 # 关键字,大小为1k
ADDR= (HOST, PORT)
udpCliSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = raw_input('>')
if not data:
break
udpCliSock.sendto(data, ADDR)
data, ADDR = udpCliSock.recvfrom(BUFSIZ)
if not data:
break
print data
udpCliSock.close()
16.4 SocketServer 模块
?是标准库中用于简化实现网络客户端与服务器所需的大量样版代码,将很多需要的代码封装好
164.1 创建一个基于SocketServer 的TCP服务器
思路:先继承StreamRequestHandler创建请求处理类,重写handle函数---调用TCPServer使用参数“请求处理类”生成TCP服务器---服务器无限循环
from SocketServer import (TCPServer as TCP, StreamRequestHandler as SRH)
from time import ctime
HOST = ''
PORT = 21567
ADDR = (HOST, PORT)
class MyRequestHandler(SRH): # 定义继承StreamRequestHandler的请求类,重写handle函数(默认是pass)
def handle(self):
print '...connected from:', self.client_address
self.wfile.write('{0} {1}' .format(ctime(), self.rfile.readline())) # 分别读,写
tcpServ = TCP(ADDR, MyRequestHandler) # 调用TCPServer要求参数addr和请求处理类
print 'waiting for connection...'
tcpServ.serve_forever() # 这个服务器进入无限循环
16.4.2 创建一个基于SocketServer的TCP客户端
思路:创建客户端套接字---发送数据---接收数据---关闭套接字
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
while True:
tcpCliSock = socket(AF_INET, SOCK_STREAM) # 与之前的区别在这里,SocketServer的请求处理器的默认行为是接受连接,得到请求,就关闭连接,所以要每次都要创建一个套接字
tcpCliSock.connect(ADDR)
data = raw_input('>')
if not data:
break
tcpCliSock.send('%s\r\n' % data)
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
print data.strip()
tcpCliSock.close()
16.5 Twisted 框架
?是一个完全时间驱动的网络框架,允许使用和开发完全异步的网络应用程序和协议
17 网络客户端编程
?基于TCP/UDP等低级别的协议,开发出来特定用途的协议,包括FTP/SCP,NNTP,SMTP
现在我们基于这些协议学习开发客户端(相对与服务器)
17.2 文件传输
17.2.2 文件传输协议FTP
流程:客户端连接远程的FTP服务器---客户端输入用户名和密码(或者匿名)---客户端做各种文件传输和信息查询操作---客户端登出远程FTP服务器,通讯结束
17.2.6 实例
import ftplib
import os
import socket
HOST = 'ftp.mozilla.org'
DIRN = 'pub/webtools'
FILE = 'bugzilla-LATEST.tar.gz'
def main():
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror), e:
print 'ERROR: cannot reach "%s"' % HOST
return
print '***Connected to host "%s"' % HOST
try:
f.login()
except ftplib.error_perm:
print 'ERROR: cannot login anonymously'
f.quit()
return
print '*** Login in as "anonymous'
try:
f.cwd(DIRN)
except ftplib.error_perm:
print 'ERROR: cannot CD to "%s"' % DIRN
f.quit()
return
print '*** Changed to "%s" folder' % DIRN
try:
f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write)
except ftplib.error_perm:
print 'ERROR: cannot read file "%s" to CWD' % FILE
f.quit()
return
if __name__ == '__main__':
main()
网络编程socket-SocketServer-FTP的更多相关文章
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- 网络编程 并发socketserver
网络编程 并发socketserver ipv4.ipv6 ip协议:规定网络地址的协议 B/S架构 C/S架构 bs是cs的一种 B/S是浏览器和服务端架构 C/S是客户端和服务端架构 osi七层协 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
- 网络编程Socket之TCP之close/shutdown具体解释(续)
接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...
- 铁乐学Python_Day33_网络编程Socket模块1
铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- linux网络编程-socket(37)
在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
随机推荐
- Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑
django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...
- 网络流24题:P2762 太空飞行计划问题
P2762 太空飞行计划问题 题目背景 题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,E ...
- 精简Docker镜像的五种通用方法
http://dockone.io/article/8163 精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患.优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而 ...
- Java中BigInteger类型
BigInteger是java.math包提供的处理大整数类型,实现了大整数的存储,四则运算,判断素数的方法,求幂,求模,求逆元,求最大公约数等方法.本文主要分析下BigInteger对于大整数的存储 ...
- Mybatis使用- Mybatis JdbcType与Oracle、MySql数据类型对应列表 ; Mybatis中javaType和jdbcType对应关系
Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIG ...
- Locust性能测试框架学习
1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 官网:https://loc ...
- DNS(转载)
最近帮朋友注册域名配置主机,碰到一些DNS上的一些概念,惭愧于有一些东西已经忘记是啥意思,于是决定重新学习一下DNS方面的基本概念. 常用概念: TTL: TTL为Time to live的缩写,网络 ...
- MFC之HTTP文件上传
BOOL UploadFile(LPCTSTR strURL, LPCTSTR strLocalFileName) { // 如果URL为空或者文件不存在,直接返回 if (strURL == NUL ...
- MySql数据库 - 4.可视化操作数据库
创建表 对表中数据进行 增.删.改.查 查 右键刚刚创建的表 - 选择查看前 1000 条数据 增.改 表格必须有主键才能添加数据,主键是不能重复的 1. 右键表 - 查看前 1000 条数据 2. ...
- 【bzoj1316】树上的询问 树的点分治+STL-set
题目描述 一棵n个点的带权有根树,有p个询问,每次询问树中是否存在一条长度为Len的路径,如果是,输出Yes否输出No. 输入 第一行两个整数n, p分别表示点的个数和询问的个数. 接下来n-1行每行 ...