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的Django框架可适配的各种数据库介绍
Jul 15 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
python flask框架实现重定向功能示例
Jul 02 Python
python字符串的拼接方法总结
Nov 18 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
解决IDEA 的 plugins 搜不到任何的插件问题
May 04 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
OpenCV 图像梯度的实现方法
Jul 25 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
许愿墙中用到的函数
2006/10/07 Javascript
Javascript调试工具(下载)
2007/01/09 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
H5实现仿flash效果的实现代码
2017/09/29 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python多任务之协程的使用详解
2019/08/26 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
饭店工作计划书
2014/01/10 职场文书
有关打架的检讨书
2014/01/25 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
给医院的感谢信
2015/01/21 职场文书
电信营业员岗位职责
2015/04/14 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书