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或许是个更好的选择。

  • 相关阅读:
    cmake
    docker
    rust
    linux
    FPGA
    visual studio
    win+R
    word文档的导出(用freemarker模板导出)(桃)
    iconfont的引入方法
    jquery 日期插件
  • 原文地址:https://www.cnblogs.com/vipitsoft/p/5647156.html
Copyright © 2011-2022 走看看