Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos melo sales

Como conectar um aplicativo cliente ao servidor, passando por um terceiro aplicativo hospedado em um VPS (Virtual Private Server)?

Recommended Posts

2
 

Eu tenho um aplicativo cliente> servidor, onde são estabelecidas conexões usando componentes Socket ( TClientSocketdo cliente se conecta ao TServerSocketservidor). Agora, desejo que os clientes se conectem primeiro a um terceiro aplicativo (um tipo de "ponte de conexão" ou "repetidor") que será executado em um Windows VPS e deve direcionar essas conexões dos clientes para o aplicativo do servidor em execução no servidor pc. Exemplo:

5lUou.png

 

 

Provavelmente (não tenho certeza) esse tipo de "ponte de conexão" ou "repetidor" que será executado no VPS pode ser semelhante ao aplicativo de servidor que será executado no servidor pc, mas não sei como conectar e fazer o gerenciamento da conexão / desconexão e o envio / recebimento de dados entre esses três aplicativos. Alguém poderia me dizer como isso pode ser feito de uma maneira simples e, se possível, também fornecer um exemplo de código sobre isso?

Abaixo segue o código do cliente e servidor (servidor que será executado no servidor pc), isso é tudo o que tenho até agora.

 

 

Cliente

uses
  ScktComp;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Timer1: TTimer;
    Label1: TLabel;
    procedure ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure Timer1Timer(Sender: TObject);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Label1.Caption := 'CONNECTED';
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject; Socket: TCustomWinSocket);
begin
  Label1.Caption := 'CONNECTING...';
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  Label1.Caption := 'DISCONNECTED';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if not ClientSocket1.Active then
    ClientSocket1.Active := true;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ErrorCode := 0;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  s: string;
begin
  s := Socket.ReceiveText;
  if s = 'CMD' then
    Socket.SendText('Hello, here is Client: ' + Socket.LocalHost + '!');
end;

end.

Servidor:

uses
  ScktComp;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    ServerSocket1: TServerSocket;
    PopupMenu1: TPopupMenu;
    SON: TMenuItem;
    SOFF: TMenuItem;
    SCMD: TMenuItem;
    procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure SONClick(Sender: TObject);
    procedure SOFFClick(Sender: TObject);
    procedure SCMDClick(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
  Item: TListItem;
begin
  Item := ListView1.Items.Add;
  Item.Caption := IntTostr(Socket.Handle);
  Item.SubItems.Add(Socket.RemoteAddress);
  Item.SubItems.Add(Socket.RemoteHost);
  Item.Data := Socket.Data;
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
var
  Item: TListItem;
begin
  Item := ListView1.FindCaption(0, inttostr(Socket.Handle), false, true, false);
  if Item <> nil then
    Item.Delete;
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  ErrorCode := 0;
end;

procedure TForm1.SONClick(Sender: TObject);
begin
  ServerSocket1.Active := true;
end;

procedure TForm1.SOFFClick(Sender: TObject);
begin
  ServerSocket1.Active := false;
end;

procedure TForm1.SCMDClick(Sender: TObject);
begin
  if ListView1.Selected = nil then
    exit;
  ServerSocket1.Socket.Connections[ListView1.ItemIndex].SendText('CMD');
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  s: string;
begin
  s := Socket.ReceiveText;
  if s <> '' then
    ShowMessage(s);
end;

end.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Fernando Rafael
      Bom dia, alguém poderia me ajudar com esse problema? 
       
      Estou fazendo um aplicativo bem simples em que sua única função será criar uma pasta no celular (em local acessível pelo gerenciador de arquivos do usuário), e posteriormente copiar arquivos de outro local ou rede e colocar nesta pasta.
       
      Fiz algumas pesquisas, mas por incrível que pareça não encontrei algo que tenha funcionando. Também tenho dúvidas sobre qual seria o equivalente ao "C:/" do Android.
    • Por Kakaroto1309
      Preciso de uma ajuda para conectar com o banco. Estava tudo funcionando normalmente com MYSQL agora parou tudo e estou tentando trocar para MYSQLI.
      Não acho o erro, já tentei de tudo.
       
      connection.php
      <? function conecta() { $host = "localhost"; $user = "admin"; $pass = "123456789"; $db = "principal"; //Conexão $conexao = mysqli_connect($host, $user, $pass) or die("Erro na conexão:".mysqli_error()); //Selecionar BD mysqli_select_db($conexao,$db) or die("Erro ao selecionar BD"); } function desconecta() { mysqli_close(); } ?> validate.php
      <? if (empty($_POST) and (empty($_POST['cpUsuario']) OR empty($_POST['cpSenha']))) { header("Location: ../login.php"); exit; } else { include("connection.php"); conecta(); $varUsuario = $_POST['cpUsuario']; $varSenha = sha1($_POST['cpSenha']); $stt = "SELECT ID,txNome,txNivel FROM tbUsuario WHERE txUsuario='$varUsuario' and txSenha='$varSenha' LIMIT 1"; $sql = mysqli_query($conexao,$stt) or die(mysqli_error($conexao)); $existe = mysqli_num_rows($sql); if ($existe == 0) { echo "Login invalido ou inexistente na base"; exit; } else { $resultado = mysqli_fetch_assoc($sql); if (!isset($_SESSION)) { session_start(); } $_SESSION['UsuarioID'] = $resultado['ID']; $_SESSION['UsuarioNOME'] = $resultado['txNome']; $_SESSION['UsuarioNIVEL'] = $resultado['txNivel']; header("Location: ../menu.php"); exit; } } ?> O erro agora está dando o seguinte:
      PHP Warning:  mysqli_query() expects parameter 1 to be mysqli, null given in /home4/public_html/connection/validate.php on line 17
       
      Linha 17 é essa:
      $sql = mysqli_query($conexao,$stt) or die(mysqli_error($conexao));
       
      Se eu tiro o $conexao do mysqli_query ele da erro de "mysqli_query() expects at least 2 parameters, 1 given" e se eu coloco o erro é "mysqli_query() expects parameter 1 to be mysqli, null given"
       
      Alguem sabe como posso resolver isso?
    • Por Ane_
      Olá gente.
       
      Não consigo abrir o arquivo de desenvolvimento de um aplicativo,
      que foi feito pela themeforest(o template).
      Será que ele não é compatível com as IDE's que eu tô tentando abrir, já tentei no:
       
      Notepad++ Visual Studio (Com o ionic instalado) Android Studio  
      Esse é um dos erros que aparecem:
       
      "the archive not is displayed in the editor because it is either binary or uses unsupported text encoding"
       
    • Por biakelly
      Meninos, estou recebendo um erro ao cadastrar usuário:
       
      Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/hqxz0o4/public_html/inc.functions.php on line 181
       
      Tal erro aponta para esta linha:
      if(mysqli_num_rows( $result ) >= 1) código completo:
       
      function already_exists($column, $value) { global $dbHandle, $db_tblUsrs; $sql = "SELECT * FROM $db_tblUsrs WHERE $column = '$value'"; $result = mysqli_query($dbHandle, $sql); if(mysqli_num_rows( $result ) >= 1) return true; else return false; } function check_login($username, $password) { global $dbHandle, $db_tblUsrs; $sql = "SELECT * FROM $db_tblUsrs WHERE CL_username = '$username' and CL_password = '$password'"; $result = mysqli_query($dbHandle, $sql); if(mysqli_num_rows($result) >= 1) { $row = mysqli_fetch_array($result,MYSQLI_ASSOC); $_SESSION['loggedIn'] = true; $_SESSION['userdbid'] = $row['CL_id']; $_SESSION['username'] = $row['CL_username']; return true; } else { $_SESSION['loginError'] = "<font color='#FCC329'>USUÁRIO OU SENHA INCORRETA</font>"; return false; } }  
       
      Poderiam me ajudar entender esse erro e corrigi-lo?
    • Por ndias
      Estou com duvida se minha conexão está encerrando.
       
      Utilizo PDO para me conectar:
       
      public static function getDb(){ try { $db = new \PDO( 'mysql:host=localhost;dbname=xyz;charset=utf8', 'xyz', 'xyz1234', array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ) ); return $db; } catch (PDOException $e) { echo "Erro de Conexão " . $e->getMessage() . "\n"; exit; } } public function __construct(\PDO $db) { $this->db = $db; } public function verifica(){ $sql = "SELECT * FROM tabela "; $result = $this->db->query($sql); $rows = $result->fetch(); if($rows){ }else{ } } public function __destruct() { unset($this->db); foreach ($this as $key => $value) { unset($this->$key); } } Estou fazendo certo? Como posso verificar se a conexão está ficando aberta?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.