`
leixbo
  • 浏览: 32428 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

python socket 之SocketServer

 
阅读更多

SocketServer模块为简化网络编程,对底层socket进行了封装。在3.0之后,模块名称改成了小写socketserver

 

SocketServer介绍 

 

There are four basic server classes: TCPServer uses the Internet TCP protocol, which provides for continuous streams of data between the client and server. UDPServer uses datagrams, which are discrete packets of information that may arrive out of order or be lost while in transit. The more infrequently used UnixStreamServer and UnixDatagramServer classes are similar, but use Unix domain sockets; they’re not available on non-Unix platforms。

 

主要有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,类关系如下,主要用前2个Server,分别服务于TCP、UDP服务

 

+---------------+

| BaseServer |

+---------------+

      |

      v

+--------------+         +-------------------------+

| TCPServer |------->| UnixStreamServer  |

+--------------+         +-------------------------+

      |

      v

+---------------+        +---------------------------+

| UDPServer |------->| UnixDatagramServer |

+---------------+        +---------------------------+

 

以上服务器都应该是异步处理,SocketServer提供了ForkingMixIn 和 ThreadingMixIn类支持异步处理

These four classes process requests synchronously; each request must be completed before the next request can be started. This isn’t suitable if each request takes a long time to complete, because it requires a lot of computation, or because it returns a lot of data which the client is slow to process. The solution is to create a separate process or thread to handle each request; the ForkingMixIn and ThreadingMixIn mix-in classes can be used to support asynchronous behaviour.

 

 

Server创建

 

创建server服务需要下面3步

Creating a server requires several steps. 

First, you must create a request handler class by subclassing the BaseRequestHandler class and overriding its handle() method; this method will process incoming requests.

Second, you must instantiate one of the server classes, passing it the server’s address and the request handler class. 

Finally, call the handle_request() or serve_forever() method of the server object to process one or many requests.

 

BaseRequestHandler有2个子类,分别对应于不同的类型的Socket类型

 

+---------------------------+         +-----------------------------------+

| BaseRequestHandler |------->| DatagramRequestHandler  |

+---------------------------+          +---------------------------------+

      |

      v

+----------------------------------+

|  StreamRequestHandler     |

+----------------------------------+

 

 

 

 SocketServer TCP例子

 

Server:

 

import SocketServer


class TCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        # just send back the same data, but upper-cased
        self.request.sendall(self.data.upper())


if __name__ == "__main__":
    HOST, PORT = "localhost", 9999

    # Create the server, binding to localhost on port 9999
    server = SocketServer.TCPServer((HOST, PORT), TCPHandler)

    # Activate the server; this will keep running until you
    # interrupt the program with Ctrl-C
    server.serve_forever()

 

 Client:

 

HOST, PORT = "localhost", 9999
#data = " ".join(sys.argv[1:])

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
data = "hello world\n"
try:
    # Connect to server and send data
    sock.connect((HOST, PORT))
    sock.sendall(data)
    # Receive data from the server and shut down
    received = sock.recv(1024)
finally:
    sock.close()

print "Sent:     {}".format(data)
print "Received: {}".format(received)

 

 

 

 

分享到:
评论

相关推荐

    python网络编程socketserver[总结].pdf

    python网络编程socketserver[总结].pdf

    python基础之socket与socketserver.docx

    Socket的英文原义是“孔”或“插座”,在Unix的进程通信机制中又称为‘套接字’。套接字实际上并不复杂,它是由一个ip地址以及一个端口号组成。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座...

    python SocketServer C++ 实现

    模仿python中的socket以及SocketServer类,做了简单的封装和实现,对些小的测试代码,可以轻松的套用

    利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这...

    Python Socket传输文件示例

    import socket,time,SocketServer,struct,os,thread\nhost='192.168.50.74' port=12307 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型 s.bind((host,port)) #绑定需要监听的I

    利用python socket多线程开发FTP软件

    1、python socket编程介绍 2、利用python socket处理多个连接 3、利用python socket 模拟SSH协议1 4、利用python socket模拟SSH协议2 5、python socketServer多线程 6、利用python socketServer多线程开发FTP软件

    python socket server

    python socket server 小例子

    python_socket_server

    python socket 服务器端代码demon

    Python聊天室 (socket tkinter)

    python聊天室,使用socket, tkinter, thread,分为服务端和客户端,能正常连接和断开,将 client.py 改为 client.pyw 运行时不会出现cmd

    python利用socketserver实现并发套接字功能

    本文实现利用python的socketserver这个强大的模块实现套接字的并发,具体内容如下 目录结构如下: 测试文件请放在server_file文件夹里面 server.py #!/usr/bin/env python # -*- coding: gbk -*- # @Version : ...

    使用 Python 进行 socket 编程

    使用 Python 进行 socket 编程,Python 提供了两个基本的 socket 模块。第一个是 Socket,它提供了标准的 BSD Sockets API。第二个是 SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。

    Python使用SocketServer模块编写基本服务器程序的教程

    SocketServer模块中集成了实现socket通信服务器功能所需的各种类和方法,这里我们就来看一下Python使用SocketServer模块编写基本服务器程序的教程:

    Python SocketServer通信框架项目实例

    本资源为本人实际项目在使用的通信框架,长连接,多线程,包含通信消息结构实例,封包、解包以及粘包、拆包的处理等,代码注释清晰简单,python3,无其他依赖,质量可靠

    Python socket实现简单聊天室

    主要为大家详细介绍了Python socket实现简单聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    python socket编程详细介绍.docx

    Python 提供了两个基本的 socket 模块。 第一个是 Socket,它提供了标准的 BSD Sockets API。 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。 下面讲的是Socket模块功能

    Python通过socketserver处理多个链接

    主要介绍了Python通过socketserver处理多个链接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Python socket实现的简单通信功能示例

    主要介绍了Python socket实现的简单通信功能,结合实例形式分析了Python socket通信的相关概念、原理、客户端与服务器端实现技巧以及socketserver模块多并发简单实现方法,需要的朋友可以参考下

    Python中使用socket发送HTTP请求数据接收不完整问题解决方法

    主要介绍了Python中使用socket发送HTTP请求数据接收不完整问题解决方法,本文使用一个循环解决了数据不完整问题,需要的朋友可以参考下

    python如何使用socketserver模块实现并发聊天

    这篇文章主要介绍了python如何使用socketserver模块实现并发聊天,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 利用socketserver模块很容易实现并发功能,下面...

    python网络编程:socketserver的基本使用方法实例分析

    本文实例讲述了python网络编程:socketserver的基本使用方法。分享给大家供大家参考,具体如下: 本文内容: socketserver的介绍 socketserver的使用 socketserver的异步服务端 首发时间:2018-03-21 也可以使用...

Global site tag (gtag.js) - Google Analytics