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,最为常用和方便的 ...
随机推荐
- Java类成员之构造器
构造器含义: 是指使得JVM在构造对象的时候,帮助进行成员变量的初始化的方法. 构造器(构造方法)格式: 1.对于构造方法而言,方法的名称是固定的,和类名相同. 2.对于构造方法而言,它没有返回值,而 ...
- UGUI ScrollView中显示模型和特效
游戏开发中有时候会遇到在UI上显示模型和特效的需求,这次需要在ScrollView上显示.我们使用UGUI的Screen Space - Camera模式,修改模型和特效的layer使之显示在UI上面 ...
- SpringBoot项目配置Date类型数据自动格式转换
application.yml加入配置 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8
- Android栈溢出漏洞利用练习
在Github上看到一个Linux系统上的栈溢出漏洞利用练习项目: easy-linux-pwn.在原项目基础上,我稍微做了一些改动,将这个项目移植到了Android 9.0系统上: easy-and ...
- 如何配置好Selenium2Library的环境
1.首先是下载如下文件 1,ActivePython-其自带了pip工具,很方便,记得选择activepython是2.7x版本的python: 2.依次安装wxpython,Robotframewo ...
- Java 使用 UnixSocket 调用 Docker API
在 Docker 官网查阅 API 调用方式 例如:查询正在运行的容器列表,HTTP 方式如下: $ curl --unix-socket /var/run/docker.sock http:/v1. ...
- Java程序员学习Go指南(二)
摘抄:https://www.luozhiyun.com/archives/211 Go中的结构体 构建结构体 如下: type AnimalCategory struct { kingdom str ...
- CSS-08-边框属性设置
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- wget报unable to resolve host address
Linux系统运行yum安装rpm包的时候提示wget unable to resolve host addresswget:无法解析主机地址.这就能看出是DNS解析的问题. 错误提示 wget: u ...
- Shell常用脚本之用户操作
批量创建10个系统帐号oldboy01-oldboy10并设置密码,密码为随机8位字符串 #!/bin/bash ..} do useradd $user -] | ` | passwd --stdi ...