python网络编程【三】(网络服务器)

建立一个服务器需要以下4步:

  1.建立socket对象。

  2.设置socket选项(可选的)

  3.绑定到一个端口(同样,也可以是一个指定的网卡)。

  4.侦听连接。

下面代码片段可以实现这些功能:

  

 1 host = ''
 2 port = 51423
 3 
 4 # 建立socket对象
 5 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 6 
 7 #指定该socket被关闭或服务器进程终止后马上释放该服务器端口
 8 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 9 
10 #绑定到一个端口号
11 s.bind((host, port))
12 
13 #监听5个连接
14 s.listen(5)

socket选项:

  

其他还有些与您操作系统相关的选项。下面程序可以给出您机器上安装的python所支持的socket选项列表:

1 #!/usr/bin/env python
2 
3 import socket
4 
5 solist = [x for x in dir(socket) if x.startswith('SO_')]
6 solist.sort()
7 for x in solist:
8     print x

UDP服务端

  从客户端角度来看,使用UDP比TCP要困难,因为客户端必须要注意丢失信息包的问题,而另一方面,在服务器端使用UDP则容易得多,程序员在编写UDP服务器时候,不用考虑丢失信息包的问题,如果从客户端来的信息包一直没有到达的话,UDP服务器根本不会知道客户端曾经试图发送过请求。

  下面是一个简单的UDP应答服务器:

  

 1 #!/usr/bin/env python
 2 
 3 import socket, traceback
 4 
 5 host = ''
 6 port = 51423
 7 
 8 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 9 
10 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
11 s.bind((host, port))
12 
13 while 1:
14     try:
15         message, address = s.recvfrom(8192)
16         print "Got data from", address
17         s.sendto(message, address)
18     except(KeyboardInterrupt, SystemExit):
19         raise
20     except:
21         traceback.print_exc()

如果您的协议只包括一个短的请求和一个短的响应,没有其他东西,UDP或许是个更好的选择。

 

posted @ 2016-07-06 15:59  木落之年  阅读(580)  评论(0编辑  收藏  举报