1.socket模块
在网络编程中最基本的组件就是套接字(socket)
套接字包括:服务套接字,客户机套接字
服务器套接字创建后就监听是否有客户机套接字进行连接
客户机只需要给出相关协议参数并对服务器进行连接即可
服务器的简单的实现:
import socket
s=socket.socket()
host=socket.gethostname()
port=1234
s.bind((host,port))
s.listen(5)
while True:
c,addr=s.accept()
print(addr)
print(c)
print("Got connection from %s"%(str(addr)))
c.send(bytes("Thank you for connecting",encoding='utf-8'))
input("按下任意键退出")
c.close()
与<
import socket
s=socket.socket()
host=socket.gethostname()
port=1234
s.connect((host,port))
print(s.recv(1024))
input("按下任意键退出")
客户端代码非常简单,誓言时先打开服务器程序再打开客户端即可
2.urllib和urllib模块
这个模块厉害了 直接可以获得网页数据
下面用百度网进行举例
import urllib.request
from pprint import pprint
webpage=urllib.request.urlopen("http://www.baidu.com")
date=webpage.read()
date=date.decode("UTF-8")
pprint(date)
因为使用的是Python3.6.1版本所以与书上所写有所不同
最终将会打印出百度网的脚本信息,使用pprint更加美观但是会花很多时间,可以换成print
3.SocketServer
SocketServer是众多服务器框架的基础
包含四个基本的类:
针对TCP流套接字的TCPServer;
针对UDP数据报套接字的UDPServer
针对性不强的UnixStreamServer和UnixDataqramServer
基本流程:
每当服务器收到一个来自客户端的连接请求,就会实例化一个请求处理程序,并且它的各种处理方法会在处理时被调用,具体调用那一个方法取决于服务器和使用的处理程序类
SocketServer中的其他类实现了对HTTP服务器的基本支持。
代码如下
from socketserver import TCPServer,StreamRequestHandler
class Handler(StreamRequestHandler):
def handle(self):
addr=self.request.getpeername()
print('Got connection from %s'%(str(addr)))
self.wfile.write(bytes('Thank you for connecting',encoding='UTF-8'))
server=TCPServer(('',1234),Handler)
server.serve_forever()
其中”就表示服务器正在其上运行的主机名”
当客户端有连接请求,Handler类继承于STeamRequestHandler所以会被调用
handle函数在初始化函数中所以也会被调用,并进行连接等一系列操作