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使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
Python二分查找详解
Sep 13 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
python 实现判断ip连通性的方法总结
Apr 22 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
Python实现的特征提取操作示例
Dec 03 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
python画环形图的方法
Mar 25 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
python opencv通过4坐标剪裁图片
Jun 05 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
php function用法如何递归及return和echo区别
2014/03/07 PHP
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
Python操作SQLite简明教程
2014/07/10 Python
python链接Oracle数据库的方法
2015/06/28 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
python将视频转换为全字符视频
2019/04/26 Python
django框架ModelForm组件用法详解
2019/12/11 Python
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
在校生党员自我评价
2013/09/25 职场文书
工厂厂长的职责
2013/12/12 职场文书
小学运动会表扬稿
2014/01/19 职场文书
大学生就业意向书范文
2014/04/01 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
民主生活会主持词
2015/07/01 职场文书
Python 图片添加美颜效果
2022/04/28 Python