您的位置:首页 > 理论基础 > 计算机网络

Python的网络编程基础

2017-06-27 19:46 351 查看
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函数在初始化函数中所以也会被调用,并进行连接等一系列操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: