python网络编程之TCP通信实例和socketserver框架使用例子


Posted in Python onApril 25, 2014

1.TCP是一种面向连接的可靠地协议,在一方发送数据之前,必须在双方之间建立一个连接,建立的过程需要经过三次握手,通信完成后要拆除连接,需要经过四次握手,这是由TCP的半关闭造成的,一方在完成数据发送后要发送一个FIN来终止这个方向的连接,一个TCP连接在收到一个FIN后仍能发送数据,但应用程序很少这么做,下面是TCP连接建立和拆除的过程:

python网络编程之TCP通信实例和socketserver框架使用例子python网络编程之TCP通信实例和socketserver框架使用例子

2.python可以实现TCP服务器和客户端的编程,下面是代码:

服务器端:

#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
while 1:
 sock,addr=s.accept()
 print "got connection form ",sock.getpeername()
 data=sock.recv(1024)
 if not data:
  break
 else:
  print data

客户端:

#!/usr/bin/env python
import socket
host="localhost"
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send("hello from client")
s.close()

3.使用socketserver框架编写TCP服务器

    Socketserver模块可以简化网络服务器的编写,它包含了四种服务器类,TCPServer使用TCP协议,UDPServer使用UDP协议,还有两个不常使用的,即UnixStreamServer和UnixDatagramServer,这两个类仅仅在unix环境下有用。

    使用服务器编程,需要进行一下步骤,先建立一个请求句柄类,这个类继承自BaseRequestHandler类,建立这个类后重写它的handle方法,然后实例化服务器类,把主机名,端口号和句柄类传给它,然后调用server_forever()方法来处理请求。

   使用socketserver框架的服务器:

import SocketServer
host=''
port=10000
class Handler(SocketServer.StreamRequestHandler): def handler(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write("connected")
server=SocketServer.TCPServer((host,port),Handler)
server.serve_forever()

上面的socketserver服务器只能处理一个请求,如果要处理多个请求,可以用forking或者threading实现,实现多进程或者多线程服务器。下面是使用forking和threading的服务器代码:

使用forking的服务器:

from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler
class Server(ForkingMixIn,TCPServer):pass
class Handler(StreamRequestHandler): def handle(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write('connected')
server=Server((''.10000),Handler)
server.serve_forever()

使用多线程的服务器:

from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler
class Server(ThreadingMixIn,TCPServer):pass
class Handler(StreamRequestHandler):
 def handle(self):
  addr=self.request.getpeername()
  print "got connection from",addr
  self.wfile.write("connected")
server=Server(('',10000),Handler)
server.serve_forever()
Python 相关文章推荐
python实现的简单抽奖系统实例
May 22 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
python常用函数与用法示例
Jul 02 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
Sep 20 Python
python实现飞机大战项目
Mar 11 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
详解Python魔法方法之描述符类
May 26 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 #Python
python中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 #Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 #Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 #Python
Python 时间操作例子和时间格式化参数小结
Apr 24 #Python
python抓取网页图片并放到指定文件夹
Apr 24 #Python
python字符串替换示例
Apr 24 #Python
You might like
php页面缓存方法小结
2015/01/10 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
python web基础之加载静态文件实例
2018/03/20 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
java字符串格式化输出实例讲解
2021/01/06 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
爱游人:Travelliker
2017/09/05 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
大学生的网络创业计划书
2013/12/26 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
六一儿童节标语
2014/10/08 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
收银员岗位职责
2015/02/03 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers