zoukankan      html  css  js  c++  java
  • 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或许是个更好的选择。

  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/vipitsoft/p/5647156.html
Copyright © 2011-2022 走看看