python网络编程【三】(网络服务器)
建立一个服务器需要以下4步:
1.建立socket对象。
2.设置socket选项(可选的)
3.绑定到一个端口(同样,也可以是一个指定的网卡)。
4.侦听连接。
下面代码片段可以实现这些功能:
host = ''
port = 51423 # 建立socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #指定该socket被关闭或服务器进程终止后马上释放该服务器端口
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #绑定到一个端口号
s.bind((host, port)) #监听5个连接
s.listen(5)
socket选项:


其他还有些与您操作系统相关的选项。下面程序可以给出您机器上安装的python所支持的socket选项列表:
#!/usr/bin/env python
import socket
solist = [x for x in dir(socket) if x.startswith('SO_')]
solist.sort()
for x in solist:
print x
UDP服务端
从客户端角度来看,使用UDP比TCP要困难,因为客户端必须要注意丢失信息包的问题,而另一方面,在服务器端使用UDP则容易得多,程序员在编写UDP服务器时候,不用考虑丢失信息包的问题,如果从客户端来的信息包一直没有到达的话,UDP服务器根本不会知道客户端曾经试图发送过请求。
下面是一个简单的UDP应答服务器:
#!/usr/bin/env python import socket, traceback host = ''
port = 51423 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port)) while 1:
try:
message, address = s.recvfrom(8192)
print "Got data from", address
s.sendto(message, address)
except(KeyboardInterrupt, SystemExit):
raise
except:
traceback.print_exc()
如果您的协议只包括一个短的请求和一个短的响应,没有其他东西,UDP或许是个更好的选择。
python网络编程【三】(网络服务器)的更多相关文章
- Python网络编程之网络基础
Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...
- Linux网络编程(三)
Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...
- [网络编程之客户端/服务器架构,互联网通信协议,TCP协议]
[网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...
- Socket网络编程--简单Web服务器(6)
本来是想实现ssl连接的,但是弄了好久都不成功,就索性不做了,等以后有能力再做了.所以这一小节就是本次的最后一节了.就简单的说几个注意点. 1.加个配置文件 使用单例模式,使用一个类,该类保存一些信息 ...
- 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分
老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分 老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...
- UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数
UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数 gethostname() getppername() getsockname() gethostbyname() ...
- 网络编程 --- URLConnection --- 读取服务器的数据 --- java
使用URLConnection类获取服务器的数据 抽象类URLConnection表示一个指向指定URL资源的活动连接,它是java协议处理器机制的一部分. URL对象的openConnection( ...
- Linux 网络编程三(socket代码详解)
//网络编程客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...
- python网络编程--socket,网络协议,TCP
一. 客户端/服务端架构(用到网络通信的地方) 我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档 ...
- Java网络编程客户端和服务器通信
在java网络编程中,客户端和服务器的通信例子: 先来服务器监听的代码 package com.server; import java.io.IOException; import java.io.O ...
随机推荐
- mysql主从配置(基于mysql5.5.x)
安装mysql数据库主从复制,步骤如下:1.主从服务器分别作以下准备: 1.1.数据库版本完全一致 1.2.修改root的密码, 不改也可以 2.修改主服务器master #vi /etc ...
- 续并查集学习笔记——Closing the farm题解
在很多时候,并查集并不是一个完整的解题方法,而是一种思路. 通过以下题目来体会并查集逆向运用的思想. Description Farmer John and his cows are planning ...
- d3.js读书笔记-1
d3.js入门 d3入门 D3是一个强大的数据可视化工具,它是基于Javascript库的,用于创建数据可视化图形.在生成可视化图形的过程中,需要以下几步: 把数据加载到浏览器的内存空间: 把数据绑定 ...
- php保留键随机打乱数组顺序
最近遇到一个需求,把一个数组随机打乱顺序,我们可以用php的shuffle函数,但是这个函数会把数组的键清空建立新的键,那么我们若想保留键只需要利用shuffle函数再做一下处理就可以了.可以自定义一 ...
- Node聊天程序实例02:chat_server.js
作者:vousiu 出处:http://www.cnblogs.com/vousiu 本实例参考自Mike Cantelon等人的<Node.js in Action>一书. chat_s ...
- SAP ERP和ORACLE ERP的区别是哪些?
SAP有非常细致深入的标准流程,在流程方面,只要是你想到的问题,SAP都会曾经遇到过并且给出过解决方案.实施SAP比较倾向于改变企业的业务流程来匹配SAP,实现标准化管理. oracle比较灵活,侧重 ...
- Redis中的客户端redis-cli 命令总结
1.连接操作相关的命令quit:关闭连接(connection)auth:简单密码认证 2.对value操作的命令exists(key):确认一个key是否存在del(key):删除一个keytype ...
- iBatis框架基本使用
iBatis框架是Java持久层开发框架,说白了就是前人写了一部分代码(针对数据库操作),我们要做的就是再次开发,拿来框架直接使用. 我们自己开发时,dao层的sql语句都是写死在程序中的,如果查询条 ...
- J2EE版本
Different versions of JEE: Note: JPE (Java Professional Edition) project announced in May 1998 at Su ...
- IOS判断设备是否已越狱
转自:http://www.cnblogs.com/supercheng/archive/2012/12/05/2804166.html - (BOOL)isJailbroken { BOOL jai ...