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 字典(Dictionary)操作详解
Mar 11 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
Python实现的求解最大公约数算法示例
May 03 Python
python实现猜拳小游戏
Apr 05 Python
python实现简单成绩录入系统
Sep 19 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
Python实现直播推流效果
Nov 26 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
在keras中实现查看其训练loss值
Jun 16 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
Python类的多重继承问题深入分析
2014/11/09 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
Python 串口读写的实现方法
2019/06/12 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python如何统计代码运行的时长
2019/07/24 Python
对Django外键关系的描述
2019/07/26 Python
python全局变量引用与修改过程解析
2020/01/07 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
大学社团活动策划书
2014/01/26 职场文书
领导干部考察材料
2014/02/08 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
植树造林的宣传标语
2014/06/23 职场文书
日语系毕业求职信
2014/07/27 职场文书
对照检查剖析材料
2014/09/30 职场文书
党员评议自我评价
2015/03/03 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL