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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
Python中is与==判断的区别
Mar 28 Python
django之session与分页(实例讲解)
Nov 13 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 Python
python单例模式的多种实现方法
Jul 26 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Django 实现jwt认证的示例
Apr 30 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实现记事本案例
2020/10/20 PHP
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
在漏洞利用Python代码真的很爽
2007/08/26 Python
12步教你理解Python装饰器
2016/02/25 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
美国网上花店:JustFlowers
2017/02/12 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
技术经理的自我评价范文
2013/12/03 职场文书
主题婚礼策划方案
2014/02/10 职场文书
代理协议书范本
2014/04/22 职场文书
教书育人演讲稿
2014/09/11 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
代码复现python目标检测yolo3详解预测
2022/05/06 Python
box-shadow单边阴影的实现
2023/05/21 HTML / CSS