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 08 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
django框架如何集成celery进行开发
May 24 Python
Python上下文管理器和with块详解
Sep 09 Python
Python决策树分类算法学习
Dec 22 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
对python中assert、isinstance的用法详解
Nov 27 Python
python二维键值数组生成转json的例子
Dec 06 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
4行Python代码生成图像验证码(2种)
Apr 07 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图片处理函数获取类型及扩展名实例
2014/11/19 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python 循环遍历字典元素的简单方法
2016/09/11 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
VC++笔试题
2014/10/13 面试题
大学生最常用的自我评价
2013/12/07 职场文书
初二学习计划书范文
2014/04/27 职场文书
环保倡议书100字
2014/05/15 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
小学运动会报道稿
2014/10/04 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
南京导游词
2015/02/03 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
mysql事务对效率的影响分析总结
2021/10/24 MySQL
DSP接收机前端设想
2022/04/05 无线电