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 04 Python
python操作redis的方法
Jul 07 Python
python学习 流程控制语句详解
Jun 01 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
Django的信号机制详解
May 05 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
解析PyCharm Python运行权限问题
Jan 08 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
如何使用python包中的sched事件调度器
Apr 30 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+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
js压缩利器
2007/02/20 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[05:09]2016国际邀请赛中国区预选赛淘汰赛首日精彩回顾
2016/06/29 DOTA
Python随手笔记之标准类型内建函数
2015/12/02 Python
python使用thrift教程的方法示例
2019/03/21 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
python如何编写win程序
2020/06/08 Python
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
员工自我鉴定范文
2013/10/06 职场文书
教师辞职报告范文
2014/01/20 职场文书
运动会广播稿200米
2014/01/27 职场文书
双十佳事迹材料
2014/01/29 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书