python简单网络服务器
来源:互联网 发布:java选择排序 编辑:程序博客网 时间:2024/04/28 22:37
对于服务器来说建立TCP连接的过程分为4步:
1.建立socket对象:这里与客户端一样,依然是:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
2.设置和得到socket选项
python定义了setsockopt()和getsockopt(),一个是设置选项,一个是得到设置。这里主要使用setsockopt(),具体结构如下:
setsockopt(level,optname,value)
level定义了哪个选项将被使用。通常情况下是SOL_SOCKET,意思是正在使用的socket选项。它还可以通过设置一个特殊协议号码来设置协议选项,然而对于一个给定的操作系统,大多数协议选项都是明确的,所以为了简便,它们很少用于为移动设备设计的应用程序。
optname参数提供使用的特殊选项。关于可用选项的设置,会因为操作系统的不同而有少许不同。如果level选定了SOL_SOCKET,那么一些常用的选项见下表:
选项
意义
期望值
SO_BINDTODEVICE
可以使socket只在某个特殊的网络接口(网卡)有效。也许不能是移动便携设备
一个字符串给出设备的名称或者一个空字符串返回默认值
SO_BROADCAST
允许广播地址发送和接收信息包。只对UDP有效。如何发送和接收广播信息包
布尔型整数
SO_DONTROUTE
禁止通过路由器和网关往外发送信息包。这主要是为了安全而用在以太网上UDP通信的一种方法。不管目的地址使用什么IP地址,都可以防止数据离开本地网络
布尔型整数
SO_KEEPALIVE
可以使TCP通信的信息包保持连续性。这些信息包可以在没有信息传输的时候,使通信的双方确定连接是保持的
布尔型整数
SO_OOBINLINE
可以把收到的不正常数据看成是正常的数据,也就是说会通过一个标准的对recv()的调用来接收这些数据
布尔型整数
SO_REUSEADDR
当socket关闭后,本地端用于该socket的端口号立刻就可以被重用。通常来说,只有经过系统定义一段时间后,才能被重用。
布尔型整数
本节在学习时,用到了SO_REUSEADDR选项,具体写法是:
S.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) 这里value设置为1,表示将SO_REUSEADDR标记为TRUE,操作系统会在服务器socket被关闭或服务器进程终止后马上释放该服务器的端口,否则操作系统会保留几分钟该端口。
3.绑定socket
绑定即为服务器要求一个端口号。
S.bind((host,port)),其中host为服务器ip,通常为空,也可以绑定到一个特定的ip地址。Port为端口号。
4.侦听连接。
利用listen()函数进行侦听连接。该函数只有一个参数,其指明了在服务器实际处理连接的时候,允许有多少个未决(等待)的连接在队列中等待。作为一个约定,很多人设置为5。如:s.listen(5)
import sockethost = ''port = 80print "Create socket"s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print "done"print "Set the socket options"s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)print "done"print "Build to port and interface"s.bind((host, port))print "done"print "Listen for connection"s.listen(5)print "Connect from ", s.getsockname()
- python简单网络服务器
- python网络编程 - 简单的时间获取服务器
- Python-简单网络抓取
- 服务器网络+数据库简单模型
- 简单的服务器网络请求
- python多进程网络服务器
- [python网络编程]DNS服务器
- Python网络编程TCP服务器与客服端简单例子(调试通过)
- Python网络编程UDP服务器与客服端简单例子(调试通过)
- Python网络编程TCP服务器与客服端简单例子(调试通过)
- Python网络编程UDP服务器与客服端简单例子(调试通过)
- Python 网络编程---简单的服务器与客户端实现---阻塞式编写
- Python网络编程 3.1 由简单的TCP服务器、客户端程序分析相关方法
- Python网络01 原始Python服务器
- Python网络02 Python服务器进化
- Python网络01 原始Python服务器
- Python网络02 Python服务器进化
- Python网络02 Python服务器进化
- [转]解决Tomcat catalina.out 不断成长导致档案过大的问题
- java 浮点数格式处理DecimalFormat用法
- Git 库的创建以及使用
- 项目中的简单shader
- 正则表达式语法大全
- python简单网络服务器
- 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
- APOC-UVA virtual judge 开启
- Android网络状态监听
- 二分总结:HDU 1551,4190;POJ 1905,3273,3122,3518;CF 371C
- IOS平台上的MVC设计模式
- 我是开发顶贴机的qq是525—093-551十二年工作经验
- SOCI、LiteSQL、POCO数据库访问类库对比
- Maven 各命令执行流程解析和说明