Jump to content
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.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 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?
    • By 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"
       
    • By mamotinho
      Olá pessoal, já rodei a internet inteira procurando uma função para eu conectar ao banco de dados SQL Server que está minha máquina virtual Dedicado. estou programando um site na hospedagem com a versão 7.3.16 , eu queria uma solução para eu conectar ao meu banco de dados mssql utilizando pdo.
       
      Eu utilizo a seguinte conexão.
       
      class Database { protected static $db; protected $db_host = DB_HOST; protected $db_usuario = DB_USER; protected $db_senha = DB_PASS; private function __construct() { try { self::$db = new PDO("odbc:Driver={SQL Server};Server=".$this->db_host."; port=122; Uid=$this->db_usuario;Pwd=$this->db_senha;"); self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Connection Error: " . $e->getMessage()); } } public static function conexao() { if (!self::$db) { new Database(); } return self::$db; } } alguém pode me da solução de como faço isso funcionar no PHP 7 pra cima.
    • By mamotinho
      Olá pessoal , estou tendo um trabalho em defini a porta na qual eu quero que meu site se conecte. eu alterei a porta utilizada na minha máquina para eu utilizar somente ela no meu site porém quando eu acrescendo o campo da PORT da o seguinte erro.
      Connection Error: SQLSTATE[08001] SQLDriverConnect: 17 [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server inexistente ou acesso negado.  
      O Código de conexão na qual estou utilizando é esse.
       
      class Database { protected static $db; protected $db_host = DB_HOST; protected $db_usuario = DB_USER; protected $db_senha = DB_PASS; private function __construct() { try { self::$db = new PDO("odbc:Driver={SQL Server};Server=".$this->db_host.";port=8657; Uid=$this->db_usuario;Pwd=$this->db_senha; PDO::ATTR_PERSISTENT => true"); self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Connection Error: " . $e->getMessage()); } } public static function conexao() { if (!self::$db) { new Database(); } return self::$db; } } se alguém pude me ajuda ficarei bastante grato.
    • By 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?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.