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字符遍历的艺术
Sep 06 Python
python线程池的实现实例
Nov 18 Python
简单讲解Python中的闭包
Aug 11 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
python实现事件驱动
Nov 21 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
python获取linux系统信息的三种方法
Oct 14 Python
pytorch中index_select()的用法详解
Jan 06 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 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
博士208HAF收音机实习报告
2021/03/02 无线电
php _autoload自动加载类与机制分析
2012/02/10 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
详解自动生成博客目录案例
2016/12/09 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
Python中的并发编程实例
2014/07/07 Python
Python去除字符串两端空格的方法
2015/05/21 Python
python使用fork实现守护进程的方法
2017/11/16 Python
使用python编写监听端
2018/04/12 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
医药类个人求职的自我评价
2014/02/12 职场文书
春节晚会主持词
2014/03/24 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书