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接口的 ...
随机推荐
- Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记
写这篇记录的原因是因为我之前在Spring Boot项目中通过MyBatis连接DB2返回的结果中存在一些字段, 这些字段的元素中缺少了一些符号,所以我现在通过在自己的电脑上通过MyBatis连接DB ...
- Java8中List的removeif()函数的使用示例
代码: import java.util.List; import java.util.function.Predicate; import org.springframework.beans.fac ...
- C-LODOP的端口和网站的端口
c-lodop的端口和网站的端口是不同的,不需要修改自己网站的端口.c-lodop32位标准版端口:8000,18000 (http网站)c-lodop32扩展版端口:8000,18000(http网 ...
- idea-配置文件提示红色
Idea建立spring配置文件首行红色 提示URI is not registered 复制出现红色字体的路径...File - Settings - schemas and DtDs 点击加号 ...
- ivy使用Maven阿里云镜像的问题
ivy默认使用的Maven仓库下载速度有点慢,所以想改成国内的,添加如下resolver: <ibiblio name="working-chinese-mirror" ro ...
- CMake版本升级
CMake 是一个可扩展的开源系统,以独立于编译器的方式在操作系统中管理生成过程.与许多跨平台系统不同,CMake 旨在与本机生成环境结合使用.放置在每个源目录中的简单配置文件(称为 CMakeLis ...
- [Tensorflow] 使用 tf.keras.utils.get_file() 下载 MS-COCO 2014 数据集
import argparse import tensorflow as tf tf.enable_eager_execution() def main(args): ""&quo ...
- 十步学习法 -- 来自<<软技能>>一书的学习方法论
<<软技能>>第三篇“学习”,作者讲述了自己的学习方法:十步学习法.下面我用编程语言的方式来介绍. 十步学习法 伪代码介绍 # **这一步的目的不是要掌握整个主题,而是对相关内 ...
- 10.Windows远程管理工具RAT----Metasploit基础----Metasploit模块----fsociety工具包
Windows远程管理工具RAT QuasarRAT github.com/quasar/QuasarRAT 命令环境 MINGW64 (GCC编译器) mkdir RAT cd RAT git cl ...
- OpenCV 例程
采集图片显示视频: #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using n ...