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的更多相关文章

  1. Python socket 基础(Client) - Foundations of Python Socket

    Python socket 基础- Foundations of Python Socket 建立socket - establish socket import socket s = socket. ...

  2. Python零基础学习系列之三--Python编辑器选择

    上一篇文章记录了怎么安装Python环境,同时也成功的在电脑上安装好了Python环境,可以正式开始自己的编程之旅了.但是现在又有头疼的事情,该用什么来写Python程序呢,该用什么来执行Python ...

  3. Python零基础学习系列之四--Python程序设计思想

    前面我们把Python环境安装成功,同时也选择了自己合适的IDE工具来开启自己的编程之旅. 那么今天来说说怎么编程,程序设计需要什么步骤,我们应该怎么做才能编写自己的程序. 1-1.程序设计方法: I ...

  4. 【python语法基础-经典练习题】python语法基础练习题01---商场打折

    # 1.一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间,会给10%的折扣(打九折),# 如果购买金额大于100元会给20%折扣.编写一程序,询问购买价格,再显示出折扣(%1 ...

  5. 大牛整理最全Python零基础入门学习资料

    大牛整理最全Python零基础入门学习资料 发布时间:『 2017-11-12 11:56 』     帖子类别:『人工智能』  阅读次数:3504 (本文『大牛整理最全Python零基础入门学习资料 ...

  6. php Socket基础

    ◆ Socket 基础PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听 ...

  7. 【Python】-NO.96.Note.2.Python -【Python 基础】

    1.0.0 Summary Tittle:[Python]-NO.95.Note.1.Python -[Python 老男孩 基础]- Style:Python Series:Python Since ...

  8. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  9. python数据分析基础

    ---恢复内容开始--- Python数据分析基础(1) //2019.07.09python数据分析基础总结1.python数据分析主要使用IDE是Pycharm和Anaconda,最为常用和方便的 ...

随机推荐

  1. springboot整合apache ftpserver详细教程(看这一篇就够了)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/12192425.html,否则将追究法律责任!!! 一.Apache ftpserver相关 ...

  2. pc和H5响应式方案

    pc响应式:(所有应用在pc端) 解决方案1.媒体查询 2.flex,百分比  3.栅格布局 媒体查询 @media screen and (max-width:768px) @media scree ...

  3. 【UEFI】---BIOS中对Guid的使用以及Lib函数的使用总结

    ---恢复内容开始--- BIOS发展至今传统的汇编实现早已被抛弃,UEFI作为目前一套主流的标准定义接口,被广泛使用.之前被一些有关GUID和一些Lib函数的使用以及跨Pkg调用给折腾的不行,每次改 ...

  4. mysql 视图/触发器/函数

    一.视图 作用:简写代码,与临时表的作用差不多 .创建 create view 视图名 as SQL语句 .修改 alter view 视图名 as 新SQL语句 .删除 drop view 视图名 ...

  5. B-Tree 和 B+Tree 结构及应用,InnoDB 引擎, MyISAM 引擎

    1.什么是B-Tree 和 B+Tree,他们是做什么用的? B-Tree是为了磁盘或其它存储设备而设计的一种多叉平衡查找树,B-Tree 和 B+Tree 广泛应用于文件存储系统以及数据库系统中. ...

  6. Ubuntu中部署Django项目的配置与链接MySQL

    Django的简介 MVT模式的介绍创建项目的虚拟环境 本次使用的是pip安装 一.更新 sudo apt update 二.安装pip sudo apt install python3-pip 三. ...

  7. Windows和Linux换行的区别

    Linux下的换行符是: "\n" Windows的换行符 : "\r\n" r = return n = newline TODO 原因: 根据平台自己转化的 ...

  8. shh登入不能自动执行.bashrc

    在linux 上新安装的anconda来管理软件,把环境变量放在home目录的.bashrc.结果每次开终端,不能直接使用conda.需要手动加环境变量. 用户登入后计算机执行了哪些文件 用户登录时b ...

  9. POJ Protecting the Flowers

    点击打开题目 题目大意 奶牛要吃花,FJ来赶牛,将第i头牛赶走要2*ti分钟,奶牛每分钟吃di个单位花,求花的最小损失 先赶吃花多的,Wrong Answer QAQ 我们可以算一算损失 设sum=d ...

  10. Web容器、Servlet容器、Spring容器、SpringMVC容器之间的关系

    以下内容为个人理解,如有误还请留言指出,不胜感激! Web容器 web容器(web服务器)主要有:Apache.IIS.Tomcat.Jetty.JBoss.webLogic等,而Tomcat.Jet ...