建立一个服务器需要以下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网络编程【三】(网络服务器)的更多相关文章

  1. Python网络编程之网络基础

    Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...

  2. Linux网络编程(三)

    Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...

  3. [网络编程之客户端/服务器架构,互联网通信协议,TCP协议]

    [网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...

  4. Socket网络编程--简单Web服务器(6)

    本来是想实现ssl连接的,但是弄了好久都不成功,就索性不做了,等以后有能力再做了.所以这一小节就是本次的最后一节了.就简单的说几个注意点. 1.加个配置文件 使用单例模式,使用一个类,该类保存一些信息 ...

  5. 老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分

    老师的blog整理 .网络编程部分 .网络编程部分 前端部分 django基础部分   老师的blog整理 python基础部分: 宝哥blog: https://www.cnblogs.com/gu ...

  6. UNIX环境高级编程——TCP/IP网络编程 常用网络信息检索函数

    UNIX环境高级编程——TCP/IP网络编程   常用网络信息检索函数 gethostname()   getppername()   getsockname()   gethostbyname() ...

  7. 网络编程 --- URLConnection --- 读取服务器的数据 --- java

    使用URLConnection类获取服务器的数据 抽象类URLConnection表示一个指向指定URL资源的活动连接,它是java协议处理器机制的一部分. URL对象的openConnection( ...

  8. Linux 网络编程三(socket代码详解)

    //网络编程客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  9. python网络编程--socket,网络协议,TCP

    一. 客户端/服务端架构(用到网络通信的地方) 我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档 ...

  10. Java网络编程客户端和服务器通信

    在java网络编程中,客户端和服务器的通信例子: 先来服务器监听的代码 package com.server; import java.io.IOException; import java.io.O ...

随机推荐

  1. Jmeter + Grafana + InfluxDB 性能测试监控

    阅读目录 1. 安装InfluxDB 2. 安装Grafana 3. 配置Jmeter 序章 前几天在群里看到大神们在讨论Jmeter + InfluxDB + Grafana监控.说起来Jmeter ...

  2. <开心一笑> 码农 黑客和2B程序员之间的区别

    笔记本电脑 码农: 黑客: 2B程序员: 求2的32次方: 码农: System.out.println(Math.pow(2, 32)); 黑客: System.out.println(1L< ...

  3. replace和replaceAll

    replace():不可以正则 replaceAll()参数十一正则 replaceFirst()参数是一个正则,匹配第一次出现的 package entity; public class Test2 ...

  4. servlet学习笔记_4

    一.response.1.response.characterEncoding和response.setContentType("text/html;charset=UTF-8") ...

  5. 在linux上配置并创建JavaFX项目

    本环境为linux配置,因为这里的JavaFX项目是为定制Oracle监控工具而写的.现Oracle已收购Java好几年,用它自己的产生监控自己的东西还是很兼容的.此处Eclipse 为4.5版本. ...

  6. Android之mtk上传log

    Android之mtk上传log 1,打开浏览器 2.输入地址http://eservice.mediatek.com/eservice-portal/login 3.输入用户名,密码 4.提eser ...

  7. 后缀数组(suffix array)

    参考: Suffix array - Wiki 后缀数组(suffix array)详解 6.3   Suffix Arrays - 算法红宝书 Suffix Array 后缀数组 基本概念 应用:字 ...

  8. zookeeper 安装 测试及集群

    centos 安装 zookeeper-3.5.2-alpha.tar.gz 网上搜索了 一下 安装教程 其实很简单 主要总结一下 中间遇到的坑 1.zookeeper 3.4.6 启动失败. 很有可 ...

  9. python——django入门篇

    要做一只有自学能力的pythoner,尽管大多数自学都是野生并不规范的,会遇到诸多坑,最后用稀奇古怪的方法解决了,但是先了解一些为以后真正学习道路填坑方便了简直不只一点点...重点来了:感觉以班里同学 ...

  10. .net 项目 调用webservice 出错,异常信息:对操作“xxx”的回复消息正文进行反序列化时出错。解决方案。

    项目运行好好的,增加并更新WebService后,出错,捕获异常信息为:对操作“xxx”的回复消息正文进行反序列化时出错.解决方案. 认真分析异常信息后,得到关键提醒: {"读取 XML 数 ...