python 网络编程常用代码段


Posted in Python onAugust 28, 2016

服务器端代码:

# -*- coding: cp936 -*-
import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#初始化socket 
sock.bind(("127.0.0.1", 8001))#绑定本机地址,8001端口
sock.listen(5)#等待客户连接 
while True:
  print "waiting client connection..."
  connection,address = sock.accept()#接收客户连接请求
  print "a client have connected..."
  while True:
    try: 
      connection.settimeout(5) #设置超时时间
      buf = connection.recv(1024) #接收数据
      if buf == "1": 
        connection.send("you have send me 1!welcome to server!")
      elif buf=="2":
        connection.send("you have send me 2!I have recv!")
      elif buf=="3":
        connection.send("close the connection!")
        break
      else: 
        connection.send("unknow command!") 
    except socket.timeout: 
      print "time out" 
  connection.close()
  print "a client exit..."

客户器端代码:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect(("127.0.0.1", 8001)) 
import time 
time.sleep(2)
while True:
  data=raw_input("input command:");
  sock.send(data)
  print sock.recv(1024)
  if data=="3":
    break
sock.close()

1.首先开两个IDLE,分别打开服务器端和客户器端代码。
2.F5运行服务器端代码,会出现waiting client connection...
3.F5运行客户端代码,会出现input command: ;
4.这时服务器和客户端就连接上了,可以正常的通信啦,如图:

python 网络编程常用代码段

5.再次运行服务器端代码时会出现错误,这时可以通过任务管理器,将其中的pythonw.exe进程结束,重新打开,编译就可以啦!

客户端:

import socket
s=socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host, port))
print s.recv(1024)

服务端:

import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
 
s.listen(5)
while True:
 c, addr = s.accept()
 print 'Got connection from', addr
 c.send('Thank you for connecting')
 c.close()

http编程

from urllib import urlopen
webpage = urlopen('http://www.python.org')

加上正规表达式

import re
text = webpage.read()
m = re.search('<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE)
m.group(1)

urllib
urllib2

一个基于SocketServer的小型服务器例子:

from SocketServer import TCPServer, StreamRequestHandler
>>> class Handler(StreamRequestHandler):
	def handle(self):
		addr = self.request.getpeername()
		print 'Got connection from', addr
		self.wfile.write('Thank you for connecting')
 
>>> server = TCPServer(('',1234), Handler)
>>> server.serve_forever()

使用SocketServer进行分叉和线程处理
分叉Server:

from SocketServer import TCPServer,ForkingMinIn, StreamRequestHandler
class Server(ForkingMinIn, TCPServer):pass
class Handler(StreamRequestHandler):
 def handle(self):
  addr = self.request.getpeername()
  print 'Got connection from',addr
  self.wfile.write('Thank you for connection')
server = Server(('',1234),Handler)
server.serve_forever()

线程Server:

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('Thank you for connecting')
server = Server(('',1234),Handler)
server.serve_forever()

带有select和pool的异步I/O
select服务:

import socket, select
s = socket.socket()
host = socket.gethostname()
prot = 1234
s.bind((host,port))
 
s.listen(5)
inputs = [s]
while True:
 rs,ws,es = select.select(inputs,[],[])
 for r in rs:
  if r is s:
  c, addr = s.accept()
  print 'Got connection from',addr
  inputs.append(c)
 else:
  try:
   data = r.recv(1024)
   disconnected = not data
  except socket.error:
   disconnected = True
   
  if disconnected:
   print r.getpeername(), 'disconnected'
   inputs.remove(r)
  else:
   print data

pool服务器:

import socket, select
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
 
fdmap = {s.fileno():s}
 
s.listen(5)
p = select.poll()
p.register(s)
while True:
 events = p.poll()
 for fd, event in events:
  if fd in fdmap:
   c, addr = s.accept()
   print 'Got connection from', addr
   p.register(c)
   fdmap[c.fileno()]=c
  elif event & select.POLLIN:
   data = fdmap[fd].recv(1024)
   if not data:
    print fdmap[fd].getpeername(),'disconnected'
    p.unregister(fd)
    del fdmap[fd]
  else:
   print data

Twisted网络框架

Python 相关文章推荐
Python递归遍历列表及输出的实现方法
May 19 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
python字典DICT类型合并详解
Aug 17 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
对Python中数组的几种使用方法总结
Jun 28 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
Python 堆叠柱状图绘制方法
Jul 29 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
python 星号(*)的多种用途
Sep 21 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
Fabric 应用案例
Aug 28 #Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 #Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 #Python
python解决方案:WindowsError: [Error 2]
Aug 28 #Python
详解Python中的文件操作
Aug 28 #Python
Python环境变量设置方法
Aug 28 #Python
Python代码解决RenderView窗口not found问题
Aug 28 #Python
You might like
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
javascript 利用Image对象实现的埋点(某处的点击数)统计
2012/12/28 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
django认证系统 Authentication使用详解
2019/07/22 Python
python正则-re的用法详解
2019/07/28 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
财务工作者先进事迹材料
2014/01/17 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
2014年话务员工作总结
2014/11/19 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python