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": breaksock.close() |
1.首先开两个IDLE,分别打开服务器端和客户器端代码。
2.F5运行服务器端代码,会出现waiting client connection...
3.F5运行客户端代码,会出现input command: ;
4.这时服务器和客户端就连接上了,可以正常的通信啦,如图:

5.再次运行服务器端代码时会出现错误,这时可以通过任务管理器,将其中的pythonw.exe进程结束,重新打开,编译就可以啦!
客户端:
|
1
2
3
4
5
6
|
import sockets=socket.socket()host = socket.gethostname()port = 1234s.connect((host, port))print s.recv(1024) |
服务端:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
import sockets = socket.socket()host = socket.gethostname()port = 1234s.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 retext = 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, StreamRequestHandlerclass Server(ForkingMinIn, TCPServer):passclass 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, StreamRequestHandlerclass Server(ThreadingMixIn, TCPServer):passclass 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, selects = socket.socket()host = socket.gethostname()prot = 1234s.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, selects = socket.socket()host = socket.gethostname()port = 1234s.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接口的 ...
随机推荐
- 修改ssh端口
centos7.5修改默认SSH端口 linux SSH默认端口是22,不修改的话存在一定的风险,要么是被人恶意扫描,要么会被人破解或者攻击,所以我们需要修改默认的SSH端口 1.修改22端口为620 ...
- 在线word转html
http://www.docpe.com/word/word-to-html.aspx
- 【leetcode_easy】532. K-diff Pairs in an Array
problem 532. K-diff Pairs in an Array 题意:统计有重复无序数组中差值为K的数对个数. solution1: 使用映射关系: 统计数组中每个数字的个数.我们可以建立 ...
- Saltstack之使用salt安装es6.0以上的head插件
本实验使用salt安装es6.0以上的head插件 ES6.0以上手动安装head插件参考:https://www.cnblogs.com/minseo/p/9117470.html 文件夹目录为 / ...
- Install Virtualbox on CentOS7---(後話,最終還是沒有用virtualbox做VM server ,感覺只適用于桌面)
參考: https://wiki.centos.org/zh-tw/HowTos/Virtualization/VirtualBox cd /etc/yum.repos.d wget http://d ...
- Java中处理OPC寄存器数据类型
1. 在milo中,处理WORD等数据类型 例子如下: VariableNode node = client.getAddressSpace().createVariableNode( new Nod ...
- windows下exfat无法写入怎么修复?
为了能够实现mac与windows文件共享,把移动硬盘格式化为exfat了,可是在osx中放入文件后,在windows上紧进行读取写入时出现错误,提示使用chkdsk进行修正,下面是修正步骤. 方法/ ...
- NDK学习笔记-JNI的异常处理与缓存策略
在使用JNI的时候,可能会产生异常,此时就需要对异常进行处理 异常处理 JNI抛出Throwable异常,在Java层可以用Throwable捕捉 而在C只有清空异常这种处理 但如果在JNI中通过Th ...
- 最新 昆仑万维java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.昆仑万维等10家互联网公司的校招Offer,因为某些自身原因最终选择了昆仑万维.6.7月主要是做系统复习.项目复盘.Leet ...
- 【php设计模式】单例模式
实现单例的三个关键点: 1.使用一个静态成员来保持一个单例实例 2.一个私有的构造方法使得该类只能在类的内部方法中被实例化 3.在实例化对象的静态方法中,先判断静态变量是否已经被赋值,如果赋值则返回该 ...