Python socket 基础(Server) - Foundations of Python Socket
Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分为 4 个步骤,
1, 建立 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2, 设置 socket 选项(可选)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
在一个服务器进程终止后,操作系统通常会保留几分端口,这样在超时之前这个
端口先属于被占用状态,不可被其他程序使用. 若设置 SO_REUSEADDR 为 true,
则操作系统会在 socket 关闭后立刻释放它的端口.
3, 绑定到一个端口, 或一个网卡
s.bind((host, port))
host 参数可以为空 '', 意思是绑定到所有的地址.
一个 use case 是, 一台 PC 有多个网卡, 一张网卡链接到公共的 Internet 上,
另一张网卡链接在内部网路上。如果希望服务只对内部网路可见, 可以同过 bind()
方法将服务绑定到内部网路的 IP 地址上. 这样对于通过公共的 Internet 访问的
用来所来服务是不可见的。
4, 监听链接请求
s.listen(5)
该方法通知操作系统准备接受链接请求. 方法接收一个 int 类型参数, 含义是指明
服务器处理链接的时候,允许有多少个等待的链接在队列中 queue. 响应连接请求,
while 1:
clientsocket, clientaddr = s.accept()
print("%s is connecting" % clientsocket.getpeername())
accept()方法会 阻塞 程序, 当一个客户端连接后才返回 异常处理,
任何没有被捕获到异常都会到时程序终止, 然而这种情况对于服务端而言是非常不好的.
因为异常将到时整个服务器关闭,并停止响应请求,从而不得不重启服务端以回复服务.
一个健壮的服务端程序,应该捕获任何错误和异常并对其做适当的处理,从而保证服务不会被终止.
import traceback
while 1:
try:
clientsocket, clientaddr = s.accept()
except KeyboardInterrupt as e: # Ctrl-C 可以终止程序
raise e
except:
traceback.print_exc() # 捕获所以其他异常,并打印
continue # 下一循环,而非终止程序
try:
print("%s is connecting" % clientsocket.getpeername())
except (KeyboardInterrupt,SystemExit): # Ctrl-C 和 sys.exit()
raise
except:
traceback.print_exc() # 打印其他异常 try:
clientsocket.close() # 进入第二个 try 代码块儿后,
# 无论是否有异产生 close() 方法都应该被调用.
except KeyboardInterrupt: # 第二,三个 try 代码块,可以合并成
# try ... finally 的结构保证 close()的调用.
raise
except:
traceback.print_exc()
Python socket 基础(Server) - Foundations of Python Socket的更多相关文章
- Python socket 基础(Client) - Foundations of Python Socket
Python socket 基础- Foundations of Python Socket 建立socket - establish socket import socket s = socket. ...
- Python零基础学习系列之三--Python编辑器选择
上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...
- Python零基础学习系列之四--Python程序设计思想
前面我们把Python环境安装成功,同时也选择了自己合适的IDE工具来开启自己的编程之旅. 那么今天来说说怎么编程,程序设计需要什么步骤,我们应该怎么做才能编写自己的程序. 1-1.程序设计方法: I ...
- 【python语法基础-经典练习题】python语法基础练习题01---商场打折
# 1.一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣(打九折),# 如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格,再显示出折扣(%1 ...
- 大牛整理最全Python零基础入门学习资料
大牛整理最全Python零基础入门学习资料 发布时间:『 2017-11-12 11:56 』 帖子类别:『人工智能』 阅读次数:3504 (本文『大牛整理最全Python零基础入门学习资料 ...
- php Socket基础
◆ Socket 基础PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听 ...
- 【Python】-NO.96.Note.2.Python -【Python 基础】
1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...
- Python入门基础学习 三
Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...
- python数据分析基础
---恢复内容开始--- Python数据分析基础(1) //2019.07.09python数据分析基础总结1.python数据分析主要使用IDE是Pycharm和Anaconda,最为常用和方便的 ...
随机推荐
- 使用docker增加部署速度的一次实践
问题: 公司给我们分配的服务器到期后不付费了,换成新服务商的服务器了.也就是说我们之前的环境需要重新搭建一次.光项目就50多个(微服务40+,其他服务不到10个),需要重新部署. 之前部署项目时,需要 ...
- 一个由"2020年1月7日 京东出现的重大 Bug 漏洞"引起的思考...
2020年1月7日,京东由于优惠券设置错误,导致大量产品以0元或者超低价成交,并且发货.网传小家电被薅24万件,损失损失金额高达7000多万.很多网友表示收到货了,在网上晒出到货截图.下面为购买截图: ...
- OpenGLES思维导图
两本书到头来就只剩下了这三张图了吧.想要原图:https://github.com/wangwangla/biji/blob/master/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8 ...
- 对标Eureka的AP一致性,Nacos如何实现Raft算法
一.快速了解Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它. 为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(le ...
- ASP.NET 开源导入导出库Magicodes.IE 导出Pdf教程
基础教程之导出Pdf收据 说明 本教程主要说明如何使用Magicodes.IE.Pdf完成Pdf收据导出 要点 导出PDF数据 自定义PDF模板 导出单据 如何批量导出单据 导出特性 PdfExpor ...
- 将jar包安装到本地仓库
通过cmd切换到apache maven 的bin目录 mvn install:install-file -DgroupId=com.antgroup.zmxy -DartifactId=zmxy-s ...
- 调试 ambari-server 总结
刚开始debug ambari-server的时候,很多逻辑都是第一次接触.其中有很多知识点还是记录一下的好,做个备忘.这些知识点对于自定义api的开发还是很有作用的. 1. api的子href的最后 ...
- webpack构建工具初始化并运行简单的demo
webpack官网:https://webpack.js.org/ webpack是构建工具 安装webpack的前提:node,npm要安装 初始化项目 首先是初始化项目,创建一个文件夹,并且进入文 ...
- python类型-序列-元组
元组是一种不可变类型,元组可用作一个字典的key. 1.创建一个元组并进行赋值 atuple = (123, 'abc', ('inner', 'tuple'), 7-9j) 2.访问元组中的值 元组 ...
- Java基础语法和基本数据类型
Java基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 对象:对象是类的一个实例,有状态(属性)和行为(方法). 类:类是一个模板,他描述一类对象的行为 ...