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 04 Python
Python Socket编程详细介绍
Mar 23 Python
python方法生成txt标签文件的实例代码
May 10 Python
Python实现八皇后问题示例代码
Dec 09 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
python实现按关键字筛选日志文件
Dec 24 Python
Python常见反爬虫机制解决方案
Jun 01 Python
win10安装python3.6的常见问题
Jul 01 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
python实现逻辑回归的示例
Oct 09 Python
使用python实现学生信息管理系统
Feb 25 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
ip签名探针
2006/10/09 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
joomla组件开发入门教程
2016/05/04 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
js实现增加数字显示的环形进度条效果
2017/02/05 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
python3 字符串知识点学习笔记
2020/02/08 Python
python实现电子词典
2020/03/03 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
django中嵌套的try-except实例
2020/05/21 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
电工工作职责范本
2014/02/22 职场文书
产品设计开发计划书
2014/05/07 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书