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字符串和文件操作常用函数分析
Apr 08 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
NumPy 数组使用大全
Apr 25 Python
python挖矿算力测试程序详解
Jul 03 Python
Django视图扩展类知识点详解
Oct 25 Python
Pytorch之Variable的用法
Dec 31 Python
python代码区分大小写吗
Jun 17 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
python安装第三方库如xlrd的方法
Oct 31 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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
SONY SRF-40W电路分析
2021/03/02 无线电
基于mysql的bbs设计(四)
2006/10/09 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
node.js中的require使用详解
2014/12/15 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
理解javascript模块化
2016/03/28 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
2016/06/17 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
Python多线程编程简单介绍
2015/04/13 Python
Python使用gensim计算文档相似性
2016/04/10 Python
python绘制直线的方法
2018/06/30 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
Python多项式回归的实现方法
2019/03/11 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
internal修饰符起什么作用
2013/12/16 面试题
年终自我鉴定
2013/10/09 职场文书
车位出租协议书范本
2016/03/19 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Golang: 内建容器的用法
2021/05/05 Golang