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中break语句的用法
May 14 Python
Django中使用locals()函数的技巧
Jul 16 Python
python fabric实现远程部署
Jan 05 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Python iter()函数用法实例分析
Mar 17 Python
Django实现全文检索的方法(支持中文)
May 14 Python
详解Python中的四种队列
May 21 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
python文件读写代码实例
Oct 21 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
kafka-python 获取topic lag值方式
Dec 23 Python
django中related_name的用法说明
May 20 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
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
奶茶专卖店创业计划书
2014/01/18 职场文书
运动会演讲稿50字
2014/08/25 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
教师岗位职责
2015/02/03 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang