Exemple #1
0
    def handle(self, sock, addr):
        logging.debug(u'connection from %s:%s' % addr)

        # 调用各个 handler 尝试生成 client
        #  检查结果,如果生成了就表示本次客户端请求的是这个协议。
        #      剩下的就交由这个协议处理。

        _handler = None
        _reset_peek_offset = False
        mysocket = MySocket(sock)

        for Handler in handler.get_handler():
            mysocket.reset_peek_offset()
            (_handler, _reset_peek_offset) = Handler.create(mysocket, self)
            if _handler is not None:
                break

        if _handler is None:
            mysocket.close(safe=False)
            logging.warn(u'[Handler]收到未识别的协议,关闭连接。')
            return

        try:
            if _reset_peek_offset:
                mysocket.reset_peek_offset()

            mysocket.set_peek(False)

            # handler 有可能是异步调用
            _handler.handler()
        except:
            logging.exception(u'client.handle()')
            mysocket.close(safe=False)
Exemple #2
0
 def connect(self):
     strings = self.entry.get()
     if (self.is_connected):
         messagebox.showwarning("FAIL TO ATTEMPT", "Already Connected")
         return
     #print(strings)
     try:
         self.socket = MySocket((strings, PORT))
         messagebox.showinfo("SUCCESS", "Connected")
         self.is_connected = True
     except:
         messagebox.showerror("ERROR", "Can not connect")
Exemple #3
0
def inicializarServidor():
    # Programa comienza aquí.
    # ref: https://docs.python.org/3/howto/sockets.html
    # Se define el socket del servidor.
    print("Creando socket")
    socket_servidor = MySocket()
    socket_servidor.bind(hostname='localhost',port=8081)
    socket_servidor.listen(number_connections=5)
    print("Socket creado, asociado al hostname '{}', puerto '{}' y número de conexiones '{}'".format('localhost',8081,5))
    
    while True:
        # Apenas se establece una conexión, se maneja apropiadamente.
        (socket_cliente, address) = socket_servidor.accept()
        # El socket obtenido en socket_cliente establece la conexión punto a punto
        # con el estacionamiento que va a enviarnos la información. Es una instancia
        # de socket.py
        
        # Recibir e imprimir lo que obtenemos del socket.
        print("Dirección IP: {}".format(address))
        # mensaje = socket_cliente.myreceive()
        mensaje_dict = socket_cliente.receive()
        print("Mensaje: {}".format(mensaje_dict))
Exemple #4
0
 def connect(self, infos):
     self.socket = MySocket(infos["machine"], int(infos["port"]))
     return (self.socket.connect())
Exemple #5
0
#0000 acceso no restringido
#pdb.set_trace()
# Funciones
def leer_placa():
    placa = input("Placa: ")
    return placa
def leer_ticket():
    ticket = input("ticket: ")
    resgistrado = input("registrado(True,False): ")
    return ticket, resgistrado

# Programa comienza aquí.
# ref: https://docs.python.org/3/howto/sockets.html
# Crear un socket como cliente.
print("Creando socket")
socket_cliente = MySocket()
socket_cliente.connect(host=HOST, port=PORT)
print("Socket conectado.")

# Enviar primer mensaje:
# Estructura del primer mensaje:
# * RIF: lleno
# * ticket: None.
# * placa: llena.
# * tipo: llena ('placa_leida')
# * puerta: llena.
# * lectura_automatica: llena, sus posibles valores son:
            # True: lectura realizada de forma automática
            # False: lentura realizada de forma manual
            # None: No aplica la información (ejemplo, mensajes servidor-cliente)
# * registrado: llena, true o false
Exemple #6
0
    def handler(self):
        # 开启 socket peek 功能。
        msock = MySocket(self.sock, True)

        # 解析 http 协议头
        request = httptool.HttpRequest(self.msock)
        request.parse_head()

        upgrade = request.headers.get('Upgrade').lower()
        if upgrade == "websocket":
            # websocket 协议
            # TODO: 这里不处理,收到服务器升级成功的回复后在处理
            request.del_conntype(retain=['Upgrade'])
        elif upgrade is not None:
            # 存在未知的升级协议
            if self.porxy is False and self.remote_host and self.remote_port:
                # 非代理模式,对未知的协议直接转发。
                msock.reset_peek_offset()
                msock.set_peek(False)
                # 对外发起请求
                try:
                    remote_sock = self.server.upstream.create_connection(
                        (self.remote_host, self.remote_port), )
                except:
                    logging.exception(u'连接 tcp host:%s port:%s 失败。' %
                                      (self.remote_host, self.remote_port))
                    self.msock.close()
                    return
                self.forward(self.sock, remote_sock, 5 * 60)
                return
            else:
                # 代理模式,删除各种未知的协议
                request.del_conntype(retain=[])
                del request.headers['Upgrade']

        try:
            remote_sock = self.server.upstream.get_http_conn(
                request.get_http_host_address())
        except:
            logging.exception(u'所有线路连接 tcp host:%s port:%s 失败。' %
                              (self.remote_host, self.remote_port))
            self.msock.close()
            return

        remote_sock.sendall(request.get_head_string())
        #TODO: 另开一个线程接受回应。
        #TODO: 这里就要开始接受回应,有可能客户端在等待 100-continue 回应。
        body = request.get_body()
        while True:
            data = body.recv(2**16)
            if data:
                remote_sock.sendall(data)
            else:
                break
        # 大概做法,接收请求,建立新连接并发出请求,然后将回应丢到回应队列里面去
        # 回应队列限制长度,如果满了就阻塞添加到队列操作。
        # 需要注意,碰到post请求就需要另开一个新连接,不要使用线程池里面的。
        # 同时需要等待之前的请求完结之后在处理post请求。

        raise NotImplementedError(u'未完成')
        remote_sock