Python的网络编程基础

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()

与<<Python基础编程>>中给出不同的是 send参数不能是字符串形式,而需要时bytes形式

在死循环中服务器套接字尝试进行连接,值得注意的是s.accept()这个函数如果连接成功会返回两个数据 一个新的套接字和客户端的地址

s.listen(5)代表最多接受5个连接


客户端的简单实现:

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类继承于StreamRequestHandler所以会被调用

handle函数在初始化函数中所以也会被调用,并进行连接等一系列操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值