1、服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求。
2、客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件。
3、在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求。
一、套接字:通信端点
1、套接字
套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。
有两种类型的套接字:基于文件和面向网络的。
2、套接字地址:主机-端口对
如果一个套接字像一个电话插孔-允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码的组合。有效的端口号范围为0-65535(小于1024的端口号预留给了系统)
3、面向连接的套接字和与无连接的套接字
面向连接,在进行通信之前必须建立一个连接。实现这种连接类型主要协议是TCP(传输控制协议)
无连接,在通信之前并不需要建立连接。主要协议是UDP(用户数据报协议)
二、Python中的网络编程
1、socket()模块函数
为创建TCP/IP套接字:tcpSock = socket.socket(socket.AF_INEF,socket.SOCK_STREAM)
创建UDP/IP套接字:udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2.常见的套接字对象方法和属性
名称 描述 服务器套接字方法 s.bind() 将地址(主机名、端口号对)绑定到套接字上 s.listen() 设置并启动TCP监听器 s.accept() 被动接受TCP客户端连接,一直等待直到连接到达(阻塞) 客户端套接字方法 s.connect() 主动发起TCP服务器连接 s.connect_ex() connect的扩展版本,此时会以错误代码的形式返回问题,而不是抛出一个异常 普通的套接字方法 s.recv() 接受TCP消息 s.send() 发送TCP消息 s.sendall() 完整的发送TCP消息 s.recvfrom() 接收UDP消息 s.shutdown() 关闭连接 s.close() 关闭套接字
3、创建TCP服务器
ss = socket() #创建服务器套接字 ss.bind() #套接字与地址绑定 ss.listen() #监听连接 inf_loop: #服务器无限循环 cs = ss.accept() #接收客户端连接 comm_loop: #通信循环 cs.recv()/cs.send() #对话(接收、发送) cs.close() #关闭客户端套接字 ss.close() #关闭服务器套接字(可选)
#!/usr/bin/env python #TCP时间戳服务器 from socket import * from time import ctime HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) tcpSerSock = socket(AF_INET,SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) while True: print('waiting for connecting...') tcpClisock, addr = tcpSerSock.accept() print('...connected from:',addr) while True: data = tcpClisock.recv(BUFSIZ) if not data: break tcpClisock.send('[%s] %s' % (bytes(ctime(),'utf-8'),data)) tcpClisock.close() tcpSerSock.close()
4、创建TCP客户端
cs = socket() cs.connect() comm_loop: cs.send()/cs.recv() cs.close()
#!/usr/bin/env python #TCP时间戳客户端 from socket import * HOST = '127.0.0.1' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) tcpClisock = socket(AF_INET,SOCK_STREAM) tcpClisock.connect(ADDR) while True: data = input('> ') if not data: break tcpClisock.send(data) data = tcpClisock.recv(BUFSIZ) if not data: break print(data.decode('utf-8')) tcpClisock.close()
5、创建UDP服务器
ss = socket() ss.bind() inf_loop: cs = ss.recvfrom()/ss.sendto() ss.close()
#!/usr/bin/env python #UDP时间戳服务器 from socket import * from time import ctime HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) udpSerSock = socket(AF_INET,SOCK_DGRAM) udpSerSock.bind(ADDR) while True: print('waiting for message...') data, addr=udpSerSock.recvfrom(BUFSIZ) udpSerSock.sendto('[%s] %s' % (ctime(),data),addr) print('...received from and returned to:',addr) udpSerSock.close()
6、创建UDP客户端
cs = socket() comm_loop: cs.send()/cs.recvfrom() cs.close()
#!/usr/bin/env python #UDP时间戳客户端 from socket import * HOST = 'localhost' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST,PORT) udpClisock = socket(AF_INET,SOCK_DGRAM) while True: data = input('> ') if not data: break udpClisock.sendto(data,ADDR) data, ADDR=udpClisock.recvfrom(BUFSIZ) if not data: break print(data) udpClisock.close()
以上就是本文关于Python网络编程详解的全部内容,希望对大家有所帮助。欢迎参阅:Python中enumerate函数代码解析、python数据类型判断type与isinstance的区别实例解析、python中requests库session对象的妙用详解等,有什么问题可以随时留言,有问题我就改。。。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]