Python网络编程常用代码
服务器端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# -*- 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..." |
客户器端代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
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.这时服务器和客户端就连接上了,可以正常的通信啦,如图:
5.再次运行服务器端代码时会出现错误,这时可以通过任务管理器,将其中的pythonw.exe进程结束,重新打开,编译就可以啦!
客户端:
1
2
3
4
5
6
|
import socket s = socket.socket() host = socket.gethostname() port = 1234 s.connect((host, port)) print s.recv( 1024 ) |
服务端:
1
2
3
4
5
6
7
8
9
10
11
12
|
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编程
1
2
|
from urllib import urlopen |
加上正规表达式
1
2
3
4
|
import re text = webpage.read() m = re.search( '<a href="([^"]+)" .*?>about</a>' , text, re.IGNORECASE) m.group( 1 ) |
urllib
urllib2
一个基于SocketServer的小型服务器例子:
1
2
3
4
5
6
7
8
9
|
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:
1
2
3
4
5
6
7
8
9
|
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:
1
2
3
4
5
6
7
8
9
|
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服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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服务器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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 |
Python网络编程常用代码的更多相关文章
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 图解Python网络编程
返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档
Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...
- python 网络编程(Socket)
# from wsgiref.simple_server import make_server## def RunServer(environ,start_response):# start_resp ...
- python 网络编程 IO多路复用之epoll
python网络编程——IO多路复用之epoll 1.内核EPOLL模型讲解 此部分参考http://blog.csdn.net/mango_song/article/details/4264 ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
- Python 网络编程相关知识学习
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
随机推荐
- Carthage - Could not find any available simulators for iOS
升级xcode版本后,用carthage编译第三方库有可能会报这个错误:[Could not find any available simulators for iOS] 两个解决方法: 1. 升级你 ...
- Jmeter安装及配置(傻瓜模式)
接下来将以傻瓜模式进行安装,跟着流程走,没错的~ 1.首先进入到apache官网https://www.apache.org/dist/jmeter/binaries下载Windows版本JMeter ...
- 关于macOS上常用操作命令(持续更新)
1.mac上显示/隐藏Finder中的隐藏文件: 显示隐藏文件:在终端中输代码“defaults write com.apple.finder AppleShowAllFiles -boolean t ...
- 前端HTML介绍,标签介绍,基础选择器,CSS引入方法
1. HTML 1.1 前端: 所有用户能看到的界面网页.pc端的应用exe.移动端应用app.微信小程序.手环的时间界面html5为基础的前端:网页.app.微信小程序 1.2 前端三剑客: 1.h ...
- 【Matlab开发】函数bsxfun的使用
[Matlab开发]函数bsxfun的使用 标签:[Matlab开发] 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/. 说明:当我们 ...
- .Net WebApi接口之Swagger UI 隐藏指定接口类或方法
swagger的一个最大的优点是能实时同步api与文档,但有些时候我们不想全部公开接口,而要隐藏或屏蔽一些接口类或方法,swagger也是支持的,只需要设置一下DocumentFilter方法. 第一 ...
- eNSP——通过Stelnet登录系统
Stelnet的原理 由于Telnet缺少安全的认证方式,而且传输过程采用TCP进行明文传输,存在很大的安全隐患,单纯提供Telnet服务容易招致主机IP地址欺骗.路由欺骗等恶意攻击.传统的Telne ...
- CentOS 7.5在线安装Docker 18.09.3
1.安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 2.安装docker yum-config-manager -- ...
- php遇到Allowed memory size of 134217728 bytes exhausted问题解决方法
终端报出了Allowed memory size of 134217728 bytes exhausted错误,而且重启电脑再次执行仍然是一样.上网查了查,是因为php默认内存限制是128M,所以需要 ...
- hdoj3586 (树形dp)
题目链接:https://vjudge.net/problem/HDU-3586 题意:一棵边权树,要删掉一些边使得每个叶子结点不能到达树根,且这些边的权值<=上限Max,且边权和小于m,求最小 ...