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,最为常用和方便的 ...
随机推荐
- <a>标签的href和onclick属性【转】
1链接的onclick 事件被先执行,其次是href属性下的动作(页面跳转,或 javascript 伪链接): 2假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行, ...
- 如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出
这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore. 第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输 ...
- 保存数据到csv
csv 逗号分隔值 一.写入 1.列表 单行添加 import csv # with open(file='a.csv', mode='w', encoding='utf-8', newline='' ...
- [洛谷 P5053] [COCI2017-2018#7] Clickbait
Description 下图是一个由容器和管道组成的排水系统.对于这个系统,\(Slavko\) 想知道如果一直向容器1灌水,那么所有容器从空到充满水的顺序. 系统共有 \(K\) 个容器标号为1到 ...
- [洛谷P3621] [APIO2007] 风铃
Description 你准备给弟弟 Ike 买一件礼物,但是,Ike 挑选礼物的方式很特别:他只喜欢那些能被他排成有序形状的东西. 你准备给 Ike 买一个风铃.风铃是一种多层的装饰品,一般挂在天花 ...
- 《ASP.NET Core 高性能系列》关于.NET Core的部署方式
概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET ...
- Creating Form Elements --Using BeginForm and EndForm 使用内建的Form辅助器方法 精通ASP.NET MVC 5
Using the BeginForm and EndForm Helper Methods in the CreatePerson.cshtml File
- BZOJ 1152 歌唱王国
题目传送门 分析: 这道题很神仙,我们给出低配版解法和高配版解法2333 低配版: 首先知道这样一个公式...(证明去高配版) 当一个字符串S其中S [ 1 , i ] = S [ n - i + 1 ...
- BAT脚本每隔30秒创建一个512兆文件(测试磁盘监控用)
@echo offsetlocal ENABLEDELAYEDEXPANSIONset /a ii=0 for /l %%i in (1,1,100) do (set /a ii+=1ping -n ...
- JS-09-数组
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...