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 time模块用法实例详解
Sep 11 Python
OpenCV实现人脸识别
Apr 07 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
python pandas获取csv指定行 列的操作方法
Jul 12 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
浅析python redis的连接及相关操作
Nov 07 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
jquery 常用操作方法
2010/01/28 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
django配置app中的静态文件步骤
2020/03/27 Python
pycharm永久激活超详细教程
2020/10/29 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
俄罗斯游戏商店:Buka
2020/03/01 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
幼儿园庆六一活动方案
2014/03/06 职场文书
文明之星事迹材料
2014/05/09 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
2016年国陪研修感言
2015/11/18 职场文书
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android