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返回真假值(True or False)小技巧
Apr 10 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
python os用法总结
Jun 08 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Python argparse模块应用实例解析
Nov 15 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
python interpolate插值实例
Jul 06 Python
基于python实现坦克大战游戏
Oct 27 Python
Python图像处理之膨胀与腐蚀的操作
Feb 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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
jquery实现人性化的有选择性禁用鼠标右键
2014/06/30 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
vue-star评星组件开发实例
2018/03/01 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python批量生成本地ip地址的方法
2015/03/23 Python
用Python编写web API的教程
2015/04/30 Python
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python实现八大排序算法(2)
2017/09/14 Python
时尚圣经:The Fashion Bible
2019/03/03 全球购物
工程总经理工作职责
2013/12/09 职场文书
《识字五》教学反思
2014/03/01 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
世界遗产导游词
2015/02/13 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python
SQL Server中的游标介绍
2022/05/20 SQL Server
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js