建立一个服务器需要以下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. latex给表格添加注释

    给表格加注释的确是很多TeX用户不好用的地方,这里提供一个样式和代码,或许对于你的学习使用有所帮助,样式如下: 代码如下: \documentclass[11pt,a4paper,english]{a ...

  2. 个人博客作业Week1

    个人博客作业Week1 一.问题 通读<构建之法>我有一下几个问题 PM没有参与代码编如何进行管理. 软件工程师的职业资格考试对我们来说很有必要吗. 当我们为用户开发软件时我们需要了解用户 ...

  3. VB.net中Ajaxpro的使用

    1:从网上下载:AjaxPro.2.DLL文件,下载地址: http://files.cnblogs.com/wequst/AjaxPro.2.zip 2:解压之后把DLL放到程序bin目录下进行参照 ...

  4. js获取当前日期

    var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1 ...

  5. strcpy strlen memcpy等的函数实现

    #include <assert.h> #include <string.h> #include <stdlib.h> #include <stdio.h&g ...

  6. 后缀树(suffix tree)

    参考: 从前缀树谈到后缀树 后缀树 Suffix Tree-后缀树 字典树(trie树).后缀树 一.前缀树 简述:又名单词查找树,tries树,一种多路树形结构,常用来操作字符串(但不限于字符串), ...

  7. HTML5 十大新特性(六)——地理定位

    简单地用一句话概括就是,使用js获取浏览器当前所在的地理坐标,实现LBS(Location Based Service,基于定位的服务). 下面写一下它的基本调用: if(navigator.geol ...

  8. 使用JDBC获取Oracle连接时报错

    The Network Adapter could not establish the connection       网络适配器不能创建连接 作为初学者的来说,这个问题让我找了好多次,每次重新开启 ...

  9. 【第1期】腾讯云的1001种玩法征集,Ipad mini和Kindle 等你拿!(文章评审中)

    版权声明:本文由阁主的小跟班原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/695994001482226944 来源:腾云 ...

  10. Configure Apache Virtual Hosts - CentOS 7

    Difficulty: 2Time: 15 minutes Want to host websites on your server? Using Apache? Great. This articl ...