您的位置:首页 > 编程语言 > Python开发

python的Socketserver模块使用,异常处理

2015-03-11 15:18 531 查看
*******************************************server.py*******************************************

#!/usr/bin/env python

#coding:utf-8

import SocketServer

import subprocess

import os,time

class HandlerTCP(SocketServer.StreamRequestHandler):

    def handle(self):

        try:

            while True:

                data = self.rfile.readline().strip()

                if data == '' or data == 'exit':

                    self.request.sendall('CTRL+C 退出')

                    self.finish()

                else:

                    A = subprocess.Popen("%s" % data,bufsize=0,stdout=subprocess.PIPE,shell=True)

                    Line = 1

                    while Line:

                        Line = A.stdout.readline()

                        if Line == "\r\n":

                            pass

                        else:

                            self.wfile.write('%s \n' % Line.strip())

                            Line = Line.strip()

                            if Line:

                                pass

                            else:

                                self.wfile.write("<<EOF")

        except Exception,e:

            A.kill()

            self.finish()

try:

    con = SocketServer.ThreadingTCPServer(('127.0.0.1',34),HandlerTCP)

    con.serve_forever()

except KeyboardInterrupt,e:

    con.server_close()

except Exception,e:

    if e[0] == 10048:

        print '端口已被占用,请重新启动程序'

    else:
        print 'Good Bye',e[0]

*******************************************client.py*******************************************

#!/usr/bin/env python

#coding:utf-8

import socket

import os,sys

con = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

con.connect(('127.0.0.1',34))

#con.settimeout(2)

try:

    while True:

        try:

            Input = raw_input('Please Enter: ')

        except KeyboardInterrupt,e:

            con.close()

        if Input:

            con.send(Input+'\n')

            try:

                while True:

                    data = con.recv(2048)

                    if data:

                        if "<<EOF" not in data:

                            print data

                        else:

                            print data.split("<<")[0]

                            break

                    else:

                        break

            except KeyboardInterrupt,e:

                pass

        else:

            print '输入不能为空'

except Exception,e:

     print 'Good Bye'

     con.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息