⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcp.py

📁 HADOOP 0.18.0安装源代码头文件
💻 PY
字号:
#Licensed to the Apache Software Foundation (ASF) under one#or more contributor license agreements.  See the NOTICE file#distributed with this work for additional information#regarding copyright ownership.  The ASF licenses this file#to you under the Apache License, Version 2.0 (the#"License"); you may not use this file except in compliance#with the License.  You may obtain a copy of the License at#     http://www.apache.org/licenses/LICENSE-2.0#Unless required by applicable law or agreed to in writing, software#distributed under the License is distributed on an "AS IS" BASIS,#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.#See the License for the specific language governing permissions and#limitations under the License.# $Id:tcp.py 6172 2007-05-22 20:26:54Z zim $##------------------------------------------------------------------------------""" TCP related classes. """import socket, re, stringreAddress    = re.compile(":")reMayBeIp = re.compile("^\d+\.\d+\.\d+\.\d+$")reValidPort = re.compile("^\d+$")class Error(Exception):    def __init__(self, msg=''):        self.message = msg        Exception.__init__(self, msg)    def __repr__(self):        return self.messageclass tcpError(Error):    def __init__(self, message):        Error.__init__(self, message)class tcpSocket:    def __init__(self, address, timeout=30, autoflush=0):        """Constructs a tcpSocket object.           address - standard tcp address (HOST:PORT)           timeout - socket timeout"""        self.address = address        self.__autoFlush = autoflush        self.__remoteSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self.__remoteSock.settimeout(timeout)        self.host = None        self.port = None        splitAddress = address        if isinstance(address, (tuple, list)):            self.host = address[0]            self.port = int(address[1])        else:            splitAddress = get_address_tuple(address)            if not splitAddress[0]:                self.host = 'localhost'            else:                self.host = splitAddress[0]            self.port = int(splitAddress[1])        self.__fileObjectOut = ''        self.__fileObjectIn = ''    def __repr__(self):        return self.address    def __iter__(self):        return self    def next(self):        sockLine = self.read()        if not sockLine:            raise StopIteration        return sockLine    def open(self):        """Attempts to open a socket to the specified address."""        socketAddress = (self.host, self.port)        try:            self.__remoteSock.connect(socketAddress)            if self.__autoFlush:                self.__fileObjectOut = self.__remoteSock.makefile('wb', 0)            else:                self.__fileObjectOut = self.__remoteSock.makefile('wb')            self.__fileObjectIn  = self.__remoteSock.makefile('rb', 0)        except:            raise tcpError, "connection failure: %s" % self.address    def flush(self):        """Flushes write buffer."""        self.__fileObjectOut.flush()    def close(self):        """Attempts to close and open socket connection"""        try:            self.__remoteSock.close()            self.__fileObjectOut.close()            self.__fileObjectIn.close()        except socket.error, exceptionObject:            exceptionMessage = "close failure %s %s" % (self.address,                exceptionObject.__str__())            raise tcpError, exceptionMessage    def verify(self):        """Verifies that a given IP address/host and port are valid. This           method will not attempt to open a socket to the specified address.        """        isValidAddress = False        if reMayBeIp.match(self.host):            if check_ip_address(self.host):                if reValidPort.match(str(self.port)):                    isValidAddress = True        else:            if reValidPort.match(str(self.port)):                isValidAddress = True        return(isValidAddress)    def read(self):        """Reads a line off of the active socket."""        return self.__fileObjectIn.readline()    def write(self, string):        """Writes a string to the active socket."""        print >> self.__fileObjectOut, stringdef check_net_address(address):    valid = True    pieces = string.split(address, '.')    if len(pieces) != 4:        valid = False    else:        for piece in pieces:            if int(piece) < 0 or int(piece) > 255:                valid = False    return validdef check_ip_address(address):    valid = True    pieces = string.split(address, '.')    if len(pieces) != 4:        valid = False    else:        if int(pieces[0]) < 1 or int(pieces[0]) > 254:            valid = False        for i in range(1,4):            if int(pieces[i]) < 0 or int(pieces[i]) > 255:                valid = False    return validdef get_address_tuple(address):    """ Returns an address tuple for TCP address.        address - TCP address of the form host:port        returns address tuple (host, port)    """    addressList = reAddress.split(address)    addressTuple = (addressList[0], int(addressList[1]))    return addressTuple

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -