socket - socketserver - start TCP server

前面提到如何使用socket模块启动tcpserver:

创建socket:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

绑定ip:sock.bind(ip,port)

监听端口:sock.listen(1)

接受连接: sock.accept()

现在我们使用一个更简单的方法创建一个TCP server。这就是SocketServer模块。这个模块提供了Socket关于TCP和UDP server的封装。

先上代码:

 

import SocketServer
import sys
import argparse

class TCPrequesthander(SocketServer.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0])
        print self.data
        self.request.sendall(self.data.upper())
        
def startTCPserver(ip, port):

    serverAddr = (ip, port)
    server = SocketServer.TCPServer(serverAddr, TCPrequesthander)
    server.serve_forever()
    

if __name__ == '__main__':
    arg = argparse.ArgumentParser(description='input port and ip')
    arg.add_argument('-i', help='input the ip address')
    arg.add_argument('-p', type=int, help='input the port')
    args = arg.parse_args()
    print 'ip : port ' + args.i +" " + str(args.p)
    startTCPserver(args.i, args.p)    

 

 

代码测试:

在服务器上启动如下:

# python socketserver_1_tcpserver.py -i 10.135.13.157 -p 12345
ip : port 10.135.13.157 12345

使用tcp client发送消息:

10.135.13.154 wrote:
echo message
10.135.13.154 wrote:
echo message

 

代码分析:

首先在SocketServer模块中需要创建一个handler的类,这个类用于连接的处理。

这个类的基类为SocketServer.BaseRequestHandler, 提供handle(), finish(),setup()三个函数,一般使用handle。

我们在TCPrequesthander继承基类,重写handle()函数,处理消息。

 

第二步骤使用SocketServer中提供的TCPserver启动一个TCPserver。需要两个参数:

  地址: (ip, port)

     handler: 我们创建的TCPrequesthander

代码完成。相对于socket模块更加的简洁迅速。

  

 

posted @ 2016-11-11 15:15  奔跑吧大龙  阅读(1218)  评论(0编辑  收藏  举报