示例#1
0
def launch_d3po(path):
    """Start a server to view an exported D3PO bundle, and open a browser.

    :param path: The TLD of the bundle
    """
    from socketserver import TCPServer
    from http.server import SimpleHTTPRequestHandler
    from random import randrange
    from socket import error
    import webbrowser
    from threading import Thread

    os.chdir(path)

    while True:
        try:
            PORT = randrange(8000, 9000)
            server = TCPServer(("", PORT), SimpleHTTPRequestHandler, False)
            server.allow_reuse_address = True
            server.server_bind()
            break
        except error:  # port already taken
            pass

    print('Serving D3PO on port 0.0.0.0:%i' % PORT)
    server.server_activate()

    thread = Thread(target=server.serve_forever)
    thread.setDaemon(True)  # do not prevent shutdown
    thread.start()
    webbrowser.open('http://0.0.0.0:%i' % PORT)
示例#2
0
    def _start_web_server():
        global http_server
        from http.server import SimpleHTTPRequestHandler
        from socketserver import TCPServer

        try:
            if need_chdir:
                os.chdir(root)
                handler = SimpleHTTPRequestHandler
            else:
                handler = partial(SimpleHTTPRequestHandler, directory=root)

            http_server = TCPServer(("", 8000),
                                    handler,
                                    bind_and_activate=False)
            http_server.daemon_threads = True
            http_server.allow_reuse_address = True
            http_server.server_bind()
            http_server.server_activate()
            http_server_ready.set()
            http_server.serve_forever()
        except:
            import traceback
            traceback.print_exc()
        finally:
            http_server = None
            http_server_ready.set()

            if need_chdir:
                os.chdir(curr_dir)
示例#3
0
    def change_socket_configuration():
        """
        设置参数 bind_and_activate=False 来修改 socket 参数
        设置参数 TCPServer.allow_reuse_address = True, 来允许服务器重新绑定一个
        之前使用过的端口号
         TCPServer.allow_reuse_address = True
         serv = TCPServer(('', 20000), EchoHandler)
         serv.serve_forever()
        :return:
        """
        from socketserver import TCPServer
        from socketserver import BaseRequestHandler
        from socket import socket

        class EchoHandler(BaseRequestHandler):
            def handle(self):
                print('Got connection from', self.client_address)
                while True:
                    msg = self.request.recv(8192)
                    print('---receive client message:----', msg)
                    if not msg:
                        break
                    self.request.send(msg)

        serv = TCPServer(('', 20000), EchoHandler, bind_and_activate=False)
        # Set up various socket options
        serv.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        # Bind and activate
        serv.server_bind()
        serv.server_activate()
        serv.serve_forever()
示例#4
0
class tcp_server(threading.Thread):
    def __init__(self, port):
        super().__init__()
        self.serv = None
        self.port = port

    def run(self):
        self.serv = TCPServer(
            ('', self.port), SeverHandler, bind_and_activate=False)
        self.serv.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
                                    True)
        # Bind and activate
        self.serv.server_bind()
        self.serv.server_activate()
        self.serv.serve_forever()

    def send_data(self, data):
        '''
            Args:
                data: bytes data
        '''
        if self.is_alive():
            for client in client_socket:
                client.sendall(data)

    def shutdown(self):
        shutting_flag[0] = True
        self.serv.socket.close()
        self.serv.shutdown()
        self.serv.server_close()
示例#5
0
class TCPCommandListener(threading.Thread):
  """
  This listener is to use a SocketServer.TCPServer on the logic for listening commands
  the advantage of this version is that is basically a server shipped with python so
  more error prone.

  It requires the implementation of a Handler class which will contain all the handshaking
  logic that was implemented on the original SocketServer (below).

  There's a specific TODO on this version: need to find the way to tell the server to stop
  once the command execution has completed. 
  """

  def __init__(self, output_handler):
    threading.Thread.__init__(self)

    self.handshake = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(8))
    self.close_key = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(8))

    self._server = TCPServer(('127.0.0.1', 0), lambda r, c, s: HandShakeHandler(r, c, s, (self.handshake, self.close_key), output_handler), False)
    self._server.server_bind()

    self.port = self._server.server_address[1]


  def run(self):
    self._server.server_activate()
    self._server.serve_forever()
示例#6
0
def test_bind_and_activate():
    '''
	通常情况下创建实例同时顺便激活。在此处,创建实例过后并没有立刻激活,而且进行相应的绑定设置,然后激活,最后阻塞提供服务
	'''
    serv = TCPServer(('', 20000), EchoHandler, bind_and_activate=False)
    serv.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    serv.server_bind()
    serv.server_activate()
    serv.serve_forever()
示例#7
0
from socketserver import StreamRequestHandler, TCPServer


class EchoHandler(StreamRequestHandler):
    def handle(self):
        print('Got connection from', self.client_address)
        # self.rfile is a file-like object for reading
        for line in self.rfile:
            # self.wfile is a file-like object for writing
            self.wfile.write(line)


if __name__ == '__main__':
    import socket

    serv = TCPServer(('', 20000), EchoHandler, bind_and_activate=False)
    # Set up various socket options
    serv.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # Bind and activate
    serv.server_bind()
    serv.server_activate()
    print('Echo server running on port 20000')
    serv.serve_forever()
示例#8
0
文件: sigmatcp.py 项目: titron89/adau
 def server_activate(self):
     TCPServer.server_activate(self)
示例#9
0
    serv = TCPServer(('', 20000), EchoHandler)
    for n in range(NWORKERS):
        t = Thread(target=serv.serve_forever)
        t.daemon = True
        t.start()
    serv.serve_forever()
# 一 般 来 讲, 一 个 TCPServer 在 实 例 化 的 时 候 会 绑 定 并 激 活 相 应 的 socket
# 。不过,有时候你想通过设置某些选项去调整底下的 socket‘ ,可以设置参数
# bind and activate=False 。如下:
if __name__ == '__main__':
    serv = TCPServer(('', 20000), EchoHandler, bind_and_activate=False)
    # Set up various socket options
    serv.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # Bind and activate
    serv.server_bind()
    serv.server_activate()
    serv.serve_forever()
# 上面的 socket 选项是一个非常普遍的配置项,它允许服务器重新绑定一个之前使
# 用过的端口号。由于要被经常使用到,它被放置到类变量中,可以直接在 TCPServer
# 上面设置。在实例化服务器的时候去设置它的值,如下所示:
if __name__ == '__main__':
    TCPServer.allow_reuse_address = True
    serv = TCPServer(('', 20000), EchoHandler)
    serv.serve_forever()
# 在上面示例中,我们演示了两种不同的处理器基类(BaseRequestHandler 和
# StreamRequestHandler )。 StreamRequestHandler 更加灵活点,能通过设置其他
# 的类变量来支持一些新的特性。比如
import socket


class EchoHandler(StreamRequestHandler):