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自动化测试工具Splinter简介和使用实例
May 13 Python
浅谈function(函数)中的动态参数
Apr 30 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
python在回调函数中获取返回值的方法
Feb 22 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
python3 使用traceback定位异常实例
Mar 09 Python
django admin后管定制-显示字段的实例
Mar 11 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
python matlab库简单用法讲解
Dec 31 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
python海龟绘图实例教程
2014/07/24 Python
Python变量赋值的秘密分享
2018/04/03 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
办公室文员工作自我评价
2013/12/01 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
管理工程专业求职信
2014/08/10 职场文书
学校重阳节活动总结
2015/03/24 职场文书
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
Python中的datetime包与time包包和模块详情
2022/02/28 Python
配置nginx负载均衡
2022/05/06 Servers
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python