Jump to content

Search the Community

Showing results for tags 'socket'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 9 results

  1. Olá, eu tenho 2 servidores com IP diferentes e usuários distribuídos entre os dois eu gostaria de saber oque eu posso fazer para que o usuário que esta conectado no servidor 1 possa se comunicar com o usuário que está no servidor 2 sem usar MySql.
  2. Olá, bom dia, boa tarde ou boa noite, estou tendo um problema, com um sistema que estou criando, agradeço a quem puder ajudar. Então, esse sistema basicamente passa um "protocolo" para os servidor e ele retorna um objeto, e vice-versa, porém, ao finalizar o cliente e reabrir sem fazer o mesmo com o servidor, é causado um erro no servidor, e ao tentar fazer algum retorno de um objeto após re-abrir o cliente é causado um erro. Erro no server ao fechar o cliente: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:161) at java.io.BufferedReader.readLine(BufferedReader.java:324) at java.io.BufferedReader.readLine(BufferedReader.java:389) at main.java.Manager.run(Manager.java:45) Erro no cliente ao reabrir e tentar obter o objeto: java.io.StreamCorruptedException: invalid stream header: 73720013 at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358) at main.java.controllers.VendedoresUI.load(VendedoresUI.java:69) at main.java.controllers.VendedoresUI.initialize(VendedoresUI.java:54) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) at main.java.controllers.Controller.loadUI(Controller.java:150) at main.java.controllers.Controller.changeUI(Controller.java:111) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71) at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275) at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769) at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470) at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398) at javafx.scene.Scene$MouseHandler.process(Scene.java:3766) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) at java.lang.Thread.run(Thread.java:748) 1. Classes do server: 1.1. Server.java public class Server extends Thread{ public Server(){} public void run() { try{ ServerSocket listener = new ServerSocket(4444); listener.setSoTimeout(0); System.out.println("Server is now running"); try { while (true) { Socket socket = listener.accept(); new Manager(socket).start(); } } finally { listener.close(); } } catch (IOException ioexception){ System.out.println("\u001B[31mError opening server, more info: "); System.out.println(ioexception); System.out.println("Closing server..."); System.exit(0); } } } 1.2. Manager.java public class Manager extends Thread{ private Socket socket; private BufferedReader in; private PrintWriter out; public Manager(Socket socket){ this.socket = socket; System.out.println("\u001B[32m" + socket.getLocalAddress() + ":" + socket.getPort() + " connected"); } @Override public void run() { try { out = new PrintWriter(socket.getOutputStream(), true); out.println("Connected"); while(true) { ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream()); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); if(in.readLine().contains(Protocols.VENDEDOR_GET_ALL)) { ResultSet res = SQLManager.Query("SELECT * FROM vendedores"); List<Vendedor> list = new ArrayList<>(); while (res.next()) { Vendedor vendedor = new Vendedor(); vendedor.setNOME(res.getString("NOME")); vendedor.setCPF(res.getString("CPF")); vendedor.setCONTATO(res.getString("CONTATO")); vendedor.setCONTA(res.getInt("CONTA")); vendedor.setBANCO(res.getInt("BANCO")); vendedor.setAGENCIA(res.getString("AGENCIA")); vendedor.setCORRENTE(res.getString("CORRENTE")); list.add(vendedor); } objectOutput.writeObject(list); } objectOutput.flush(); } } catch (IOException e) { System.out.println("\u001B[31m" + socket.getLocalAddress() + ":" + socket.getPort() + " disconnected"); e.printStackTrace(); interrupt(); } catch (SQLException | ClassNotFoundException e) { Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, e); } } } 2. Classes do Client 2.1. ClientSocket.java public class ClientSocket { private static Socket socket = null; private static BufferedReader in; private static PrintWriter out; public static void load(){ try { socket = new Socket("127.0.0.1", 4444); in = new BufferedReader( new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); System.out.print(ClientSocket.getIn().readLine()); } catch(IOException ioexception){ Logger.getLogger(ClientSocket.class.getName()).log(Level.SEVERE, null, ioexception); } } public static Socket getSocket() { return socket; } public static BufferedReader getIn() { return in; } public static PrintWriter getOut() { return out; } } 2.2 VendedoresUI.java public class VendedoresUI implements Initializable { @FXML private TableView<Vendedor> table; @FXML private TableColumn<?, ?> colName; @FXML private TableColumn<?, ?> colCPF; @FXML private TableColumn<?, ?> colContato; @FXML private TableColumn<?, ?> colConta; @FXML private TableColumn<?, ?> colBanco; @FXML private TableColumn<?, ?> colAgencia; @FXML private TableColumn<?, ?> colCorrente; ObservableList<Vendedor> list; @Override public void initialize(URL location, ResourceBundle resources) { load(); } private void load(){ try { if(ClientSocket.getSocket().isClosed()){ ClientSocket.load(); } PrintWriter escritor = new PrintWriter(ClientSocket.getSocket().getOutputStream(), true); escritor.println(Protocols.VENDEDOR_GET_ALL); ObjectInputStream obi = new ObjectInputStream(ClientSocket.getSocket().getInputStream()); List<Vendedor> mList = (List<Vendedor>) obi.readObject(); list = FXCollections.observableArrayList(mList); colName.setCellValueFactory(new PropertyValueFactory<>("NOME")); colCPF.setCellValueFactory(new PropertyValueFactory<>("CPF")); colContato.setCellValueFactory(new PropertyValueFactory<>("CONTATO")); colConta.setCellValueFactory(new PropertyValueFactory<>("CONTA")); colBanco.setCellValueFactory(new PropertyValueFactory<>("BANCO")); colAgencia.setCellValueFactory(new PropertyValueFactory<>("AGENCIA")); colCorrente.setCellValueFactory(new PropertyValueFactory<>("CORRENTE")); table.setItems(list); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
  3. Possuo uma MainFrame e uma classe Cliente e estou tentando fazer uma conexão servidor/cliente. Integrei o servidor dentro da MainFrame e gostaria de enviar mensagens para meu cliente, de forma que o cliente receba mensagens com valores dentro da mainFrame. Dentro da main eu abri a conexão Socket: ServerSocket server = new ServerSocket(3001); Socket s = server.accept(); System.out.println("Conectado!"); DataOutputStream dcs = new DataOutputStream(s.getOutputStream()); dcs.writeUTF("Bem vindo, você se conectou!"); E possuo a classe Leitor: public class Leitor extends SwingWorker<Void, Double> { Random rand = new Random(); @Override protected Void doInBackground() throws InterruptedException, IOException { while (!flag) { Double valor =(rand.nextDouble() * 100); publish(valor); if (valor > 90) { newlbl.setText ("A temperatura está alta!"); } else if (valor < 15) { newlbl.setText ("A temperatura está baixa!"); } if(valor >15 & valor <90) { newlbl.setText("Temperatura estável"); } Thread.sleep(7500); } return null; } Gostaria que em cada if dentro da void doInBackground eu pudesse enviar a mesma mensagem que eu estou setando(vai ficar se atualizando sempre, pois estou gerando valores aleatorios), usando o dcs.writeUTF(), porém preciso que a classe leitor possuo o Socket s, e o dataOutputStream dcs. Qual seria a solução? Essa é minha class Cliente.java: public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 3001); DataInputStream dis = new DataInputStream(s.getInputStream()); String msg = dis.readUTF(); System.out.println(msg); }catch (Exception e){} }
  4. WBS DIGITAL

    Criar properties para chamar ip e porta

    Estou tentando chamar o ip e porta atraves de um arquivo properties num sisteminha de chat criado em java, mas não estou conseguindo fazer isso, segue o codigo. Servidor chat public static void main(String[] args) throws IOException{ wbsCliente = new Vector(); try { ServerSocket s = new ServerSocket(2222); while (true){ System.out.print("Aguardando usuarios..."); Socket wbsConexao = s.accept(); System.out.println("Conectado!"); Thread t = new WbsChatSocket (wbsConexao); t.start(); } } catch(IOException e) { System.out.println("IOException:" + e); } } Cliente Chat public static void main(String[] args){ try { Properties pos = new Properties(); //carregas as propriedades do arquivo de configuracoes pos.load( new FileInputStream("wbsDados.properties") ); //não sei como colocar e chamar os dados do properties neste socket abaixo Socket wbsConexao = new Socket("127.0.0.1", 2222); PrintStream saida = new PrintStream(wbsConexao.getOutputStream()); BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Entre com o seu nome: "); String wbsUsuario = teclado.readLine(); saida.println(wbsUsuario); Thread t = new wbsClienteSocket(wbsConexao); t.start(); String linha; while (true) { System.out.print("> "); linha = teclado.readLine(); // antes de enviar, verifica se a conexão não foi fechada if (done) {break;} // envia para o servidor saida.println(linha); } } catch (IOException e) { // Caso ocorra alguma excessão de E/S, mostre qual foi. System.out.println("IOException: " + e); } }
  5. bruno nozé

    mudar socket para udp

    bom dia, estou convertendo este socket de tcp para udp para receber dados de um rastreador, alterei para socket_dgram e também o socket recv para socket_recvfrom, mas não esta chegando nada alguem pode me ajudar? /** * Creates a server socket and listens for incoming client connections * @param string $address The address to listen on * @param int $port The port to listen on */ function server_loop($address, $port) { GLOBAL $fh; GLOBAL $__server_listening; printLog($fh, "server_looping..."); if(($sock = socket_create(AF_INET,SOCK_DGRAM,0))) { printLog($fh, "failed to create socket: ".socket_strerror($sock)); exit(); } if(($ret = socket_bind($sock, $address, $port)) < 0) { printLog($fh, "failed to bind socket: ".socket_strerror($ret)); exit(); } socket_set_nonblock($sock); printLog($fh, "waiting for clients to connect..."); while ($__server_listening) { $connection = @socket_recvfrom($sock); if ($connection === false) { usleep(100); } elseif ($connection > 0) { handle_client($sock, $connection); } else { printLog($fh, "error: ".socket_strerror($connection)); die; } } }
  6. Henrique.antonio.buzin

    Socket Enviar e Receber Dados via TCP/IP

    Olá, estou criando uma aplicação que vai precisa enviar e receber informações via tcp/ip pelo php, vi que o php socket consegue fazer isso, mas estou tendo problemas em entender como fazer uma página que recebe, se não tem que fechar conexão, se a página que manda está errada, se abre a conexão nos dois, enfim, como fazer para receber esses dados. <?php error_reporting(E_ALL); echo "<h2>TCP/IP Connection</h2>\n"; /* Get the port for the WWW service. */ $service_port = getservbyname('www', 'tcp'); /* Get the IP address for the target host. */ $address = gethostbyname('localhost'); /* Create a TCP/IP socket. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK.\n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK.\n"; } $in = "HEAD / HTTP/1.1\r\n"; $in .= "Host: www.example.com\r\n"; $in .= "Connection: Close\r\n\r\n"; $out = ''; echo "Sending HTTP HEAD request..."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Reading response:\n\n"; while ($out = socket_read($socket, 2048)) { echo $out; } echo "Closing socket..."; // socket_close($socket); echo "OK.\n\n"; ?> Agradeço desde já!
  7. Ola pessoal boa tardem estou a 2 dias tenando buscar ajuda ao nosso Amigo Google com o seguinte problema, e nada de encontrar solução para o mesmo. O problema: Tenho um Script que teoricamente é para ser executado ao Iniciar o Servidor Linux através do Cron: @reboot php -q /var/www/server/scriptAQUI.php Porem o mesmo Inicia e me parece que ele não esta executando o Script corretamente pois ele inicia o mesmo e para logo apos, justo que se eu tentar executar o script via terminal ele da como que a porta do mesmo ja esta sendo utilizada. Os testes; Quando inicio ele com php -q /var/www/server/script.php direto do terminal ele funciona normalmente; Ja tentei colocar @reboot /usr/bin/php -q /var/www/server/scriptAQUI.php e nada também. Caso queiram posso estar postando o script PHP feito, com o socket rodando.
  8. bruno nozé

    socket php

    alguem pode me judar com este socket, preciso pegar as informações que vem na string 12 deste equipamento, como faço isso? #!/usr/bin/php -q <?php //waiting for system startup //crontab: @reboot php -q /var/www/server/tracker.php //sleep (180); /** * Listens for requests and forks on each connection */ $tipoLog = "arquivo"; // tela //debug log, escreve na tela ou no arquivo de log. $fh = null; $remip = null; $remport = null; $imei = ''; /*if ($tipoLog == "arquivo") { //Criando arquivo de log $fn = $_SERVER['DOCUMENT_ROOT']."/sites/1/logs/" . "Log_". date("dmyhis") .".log"; $fh = fopen($fn, 'w') or die ("Can not create file"); $tempstr = "Log Inicio".chr(13).chr(10); fwrite($fh, $tempstr); }*/ function abrirArquivoLog($imeiLog) { GLOBAL $fh; //$fn = ".".dirname(__FILE__)."/sites/1/logs/Log_". trim($imeiLog) .".log"; $fn = "./var/www/sites/1/logs/Log_". trim($imeiLog) .".log"; $fn = trim($fn); $fh = fopen($fn, 'a') or die ("Can not create file"); $tempstr = "Log Inicio".chr(13).chr(10); fwrite($fh, $tempstr); } function fecharArquivoLog() { GLOBAL $fh; if ($fh != null) fclose($fh); } function printLog( $fh, $mensagem ) { GLOBAL $tipoLog; GLOBAL $fh; if ($tipoLog == "arquivo") { //escreve no arquivo if ($fh != null) fwrite($fh, $mensagem.chr(13).chr(10)); } else { //escreve na tela echo $mensagem."<br />"; } } //$cnx = mysql_connect("localhost", "user1", "pass1") // or die("Could not connect: " . mysql_error()); //mysql_select_db('tracker', $cnx); //$res = mysql_query("select valor from preferencias where nome = 'host_apn'", $cnx); //$dataIp = mysql_fetch_assoc($res); //$res = mysql_query("select valor from preferencias where nome = 'port_apn'", $cnx); //$dataPorta = mysql_fetch_assoc($res); //$res = mysql_query("select valor from preferencias where nome = 'email_alertas'", $cnx); //$dataEmail = mysql_fetch_assoc($res); // IP Local //$ip = $dataIp['valor']; $ip = '23.89.198.254'; // Port //$port = $dataPorta['valor']; $port = '7095'; // Path to look for files with commands to send $command_path = "./var/www/sites/1/"; //$from_email = $dataEmail['valor']; $from_email = 'josenilsontrindade@gmail.com'; //mysql_close($cnx); $__server_listening = true; error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); declare(ticks = 1); ini_set('sendmail_from', $from_email); //printLog($fh, "become_daemon() in"); become_daemon(); //printLog($fh, "become_daemon() out"); /* nobody/nogroup, change to your host's uid/gid of the non-priv user ** Comment by Andrew - I could not get this to work, i commented it out the code still works fine but mine does not run as a priv user anyway.... uncommented for completeness */ //change_identity(65534, 65534); /* handle signals */ pcntl_signal(SIGTERM, 'sig_handler'); pcntl_signal(SIGINT, 'sig_handler'); pcntl_signal(SIGCHLD, 'sig_handler'); //printLog($fh, "pcntl_signal ok"); /* change this to your own host / port */ //printLog($fh, "server_loop in"); server_loop($ip, $port); //Finalizando arquivo //fclose($fh); /** * Change the identity to a non-priv user */ function change_identity( $uid, $gid ) { if( !posix_setgid( $gid ) ) { print "Unable to setgid to " . $gid . "!\n"; exit; } if( !posix_setuid( $uid ) ) { print "Unable to setuid to " . $uid . "!\n"; exit; } } /** * Creates a server socket and listens for incoming client connections * @param string $address The address to listen on * @param int $port The port to listen on */ function server_loop($address, $port) { GLOBAL $fh; GLOBAL $__server_listening; printLog($fh, "server_looping..."); if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { printLog($fh, "failed to create socket: ".socket_strerror($sock)); exit(); } if(($ret = socket_bind($sock, $address, $port)) < 0) { printLog($fh, "failed to bind socket: ".socket_strerror($ret)); exit(); } if( ( $ret = socket_listen( $sock, 0 ) ) < 0 ) { printLog($fh, "failed to listen to socket: ".socket_strerror($ret)); exit(); } socket_set_nonblock($sock); printLog($fh, "waiting for clients to connect..."); while ($__server_listening) { $connection = @socket_accept($sock); if ($connection === false) { usleep(100); } elseif ($connection > 0) { handle_client($sock, $connection); } else { printLog($fh, "error: ".socket_strerror($connection)); die; } } } /** * Signal handler */ function sig_handler($sig) { switch($sig) { case SIGTERM: case SIGINT: //exit(); break; case SIGCHLD: pcntl_waitpid(-1, $status); break; } } $firstInteraction = false; /** * Handle a new client connection */ function handle_client($ssock, $csock) { GLOBAL $__server_listening; GLOBAL $fh; GLOBAL $firstInteraction; GLOBAL $remip; GLOBAL $remport; $pid = pcntl_fork(); if ($pid == -1) { /* fork failed */ //printLog($fh, "fork failure!"); die; } elseif ($pid == 0) { /* child process */ $__server_listening = false; socket_getpeername($csock, $remip, $remport); //printLog($fh, date("d-m-y h:i:sa") . " Connection from $remip:$remport"); $firstInteraction = true; socket_close($ssock); interact($csock); socket_close($csock); printLog($fh, date("d-m-y h:i:sa") . " Connection to $remip:$remport closed"); fecharArquivoLog(); } else { socket_close($csock); } } function interact($socket) { GLOBAL $fh; GLOBAL $command_path; GLOBAL $firstInteraction; GLOBAL $remip; GLOBAL $remport; $loopcount = 0; $conn_imei = ""; /* TALK TO YOUR CLIENT */ $rec = ""; // Variavel que indica se comando est� em banco ou arquivo. $tipoComando = "arquivo"; //"arquivo"; //Checando o protocolo $isGIMEI = false; $isGPRMC = false; $send_cmd = ""; # Read the socket but don't wait for data.. while (@socket_recv($socket, $rec, 2048, 0x40) !== 0) { # If we know the imei of the phone and there is a pending command send it. if ($conn_imei != "") { if ($tipoComando == "arquivo" and file_exists("$command_path/$conn_imei")) { $send_cmd = file_get_contents("$command_path/$conn_imei"); socket_send($socket, $send_cmd, strlen($send_cmd), 0); unlink("$command_path/$conn_imei"); printLog($fh, "Arquivo de comandos apagado: " . $send_cmd . " imei: " . $conn_imei); } else { if ($tipoComando == "banco" and file_exists("$command_path/$conn_imei")) { //Conecta e pega o comando pendente $cnx = mysql_connect("localhost", "user1", "pass1") or die("Could not connect: " . mysql_error()); mysql_select_db('tracker', $cnx); $res = mysql_query("SELECT c.command FROM command c WHERE c.imei = '$conn_imei' ORDER BY date DESC LIMIT 1", $cnx); while($data = mysql_fetch_assoc($res)) { $send_cmd = $data['command']; echo 'acessou o comando'; } // Deletando comando //mysql_query("DELETE FROM command WHERE imei = $conn_imei"); mysql_close($cnx); socket_send($socket, $send_cmd, strlen($send_cmd), 0); unlink("$command_path/$conn_imei"); printLog($fh, "Comandos do arquivo apagado: " . $send_cmd . " imei: " . $conn_imei); } else { //Se nao tiver comando na fila e for a primeira iteracao, obtem o ultimo comando v�lido enviado if ($firstInteraction == true) { sleep (1); $send_cmd = "**,imei:". $conn_imei .",C,02m"; //Obtendo o ultimo comando $cnx = mysql_connect("localhost", "user1", "pass1") or die("Could not connect: " . mysql_error()); mysql_select_db('tracker', $cnx); $res = mysql_query("SELECT c.command FROM command c WHERE c.command like '**,imei:". $conn_imei .",C,%' and c.imei = $conn_imei ORDER BY date DESC LIMIT 1", $cnx); while($data = mysql_fetch_assoc($res)) { $send_cmd = $data['command']; } mysql_close($cnx); socket_send($socket, $send_cmd, strlen($send_cmd), 0); printLog($fh, "Comando de start: " . $send_cmd . " imei: " . $conn_imei); $firstInteraction = false; } } } // Comando enviado printLog($fh, date("d-m-y h:i:sa") . " Sent: $send_cmd"); } # Some pacing to ensure we don't split any incoming data. sleep (1); # Timeout the socket if it's not talking... # Prevents duplicate connections, confusing the send commands $loopcount++; if ($loopcount > 120) return; #remove any whitespace from ends of string. $cnx = mysql_connect("localhost", "user1", "pass1"); mysql_select_db('tracker', $cnx); if ($rec != "") { $rec = trim($rec); if (strpos($rec, "GPRMC") === false) { /* M�DULO IMEI GEN�RICO */ $isGIMEI = true; $loopcount = 0; if ($fh != null) printLog($fh, date("d-m-y h:i:sa") . " Got : $rec"); $parts = explode(',',$rec); if (strpos($parts[0], "#") === FALSE) { /* Andrew's tracker is different.... Array ( [0] => imei:354779030525274 [1] => tracker [2] => 0909221022 [3] => +61417801658 [4] => F [5] => 022234.000 [6] => A [7] => 3506.5232 [8] => S [9] => 13829.5988 [10] => E [11] => 0.00 [12] => ) */ # $imei = substr($parts[0],0, -1); # Only worry about the rest if there is data to get if (count($parts) > 1) { $imei = substr($parts[0],5); $infotext = mysql_real_escape_string($parts[1]); $trackerdate = mysql_real_escape_string($parts[2]); $gpsSignalIndicator = mysql_real_escape_string($parts[4]); $speed = 0; //Se gpsSignalIndicator <> L, pega o outros dados if ($gpsSignalIndicator != 'L') { $phone = mysql_real_escape_string($parts[3]); $satelliteFixStatus = mysql_real_escape_string($parts[6]); $latitudeDecimalDegrees = mysql_real_escape_string($parts[7]); $latitudeHemisphere = mysql_real_escape_string($parts[8]); $longitudeDecimalDegrees = mysql_real_escape_string($parts[9]); $longitudeHemisphere = mysql_real_escape_string($parts[10]); $speed = mysql_real_escape_string($parts[11]); } //inicio verifica geofence mysql_select_db('tracker', $cnx); $texto_sms_localiza = ""; $texto_sms_alerta_hodometro = ""; $texto_sms_alerta = ""; $result = mysql_query("select * from preferencias", $cnx); while ($dataPref = mysql_fetch_assoc($result)){ if($dataPref['nome'] == 'texto_sms_localiza') $texto_sms_localiza = $dataPref['valor']; if($dataPref['nome'] == 'texto_sms_alerta_hodometro') $texto_sms_alerta_hodometro = $dataPref['valor']; if($dataPref['nome'] == 'texto_sms_alerta') $texto_sms_alerta = $dataPref['valor']; } if ( $imei != "" ) { $consulta = mysql_query("SELECT * FROM geo_fence WHERE imei = '$imei'", $cnx); while($data = mysql_fetch_assoc($consulta)) { $idCerca = $data['id']; $imeiCerca = $data['imei']; $nomeCerca = $data['nome']; $coordenadasCerca = $data['coordenadas']; $resultCerca = $data['tipo']; $tipoEnvio = $data['tipoEnvio']; strlen($latitudeDecimalDegrees) == 9 && $latitudeDecimalDegrees = '0'.$latitudeDecimalDegrees; $g = substr($latitudeDecimalDegrees,0,3); $d = substr($latitudeDecimalDegrees,3); $strLatitudeDecimalDegrees = $g + ($d/60); $latitudeHemisphere == "S" && $strLatitudeDecimalDegrees = $strLatitudeDecimalDegrees * -1; strlen($longitudeDecimalDegrees) == 9 && $longitudeDecimalDegrees = '0'.$longitudeDecimalDegrees; $g = substr($longitudeDecimalDegrees,0,3); $d = substr($longitudeDecimalDegrees,3); $strLongitudeDecimalDegrees = $g + ($d/60); $longitudeHemisphere == "S" && $strLongitudeDecimalDegrees = $strLongitudeDecimalDegrees * -1; $strLongitudeDecimalDegrees = $strLongitudeDecimalDegrees * -1; $lat_point = $strLatitudeDecimalDegrees; $lng_point = $strLongitudeDecimalDegrees; $exp = explode("|", $coordenadasCerca); if( ( count($exp) ) < 5 ) { $strExp = explode(",", $exp[0]); $strExp1 = explode(",", $exp[2]); } else { $int = (count($exp)) / 2; $strExp = explode(",", $exp[0]); $strExp1 = explode(",", $exp[$int]); } $lat_vertice_1 = $strExp[0]; $lng_vertice_1 = $strExp[1]; $lat_vertice_2 = $strExp1[0]; $lng_vertice_2 = $strExp1[1]; if ( $lat_vertice_1 < $lat_point Or $lat_point < $lat_vertice_2 And $lng_point < $lng_vertice_1 Or $lng_vertice_2 < $lng_point ) { $result = '0'; $situacao = 'fora'; } else { $result = '1'; $situacao = 'dentro'; } if ( $result <> $resultCerca And round($speed * 1.852,0) > 0 ) { mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Cerca ". $nomeCerca ." Violada!')", $cnx); if ( $tipoEnvio == 0 ) { # Convert the GPS coordinates to a human readable address $tempstr = "http://www.systemtracker.com.br\">www.systemtracker.com.br</a></p>"; $msg .= "</body>"; $msg .= "</html>"; $mail = new PHPMailer(); $mail->Mailer = "smtp"; $mail->IsHTML(true); $mail->CharSet = "utf-8"; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.gmail.com"; $mail->Port = "587"; $mail->SMTPAuth = "true"; $mail->Username = "josenilsontrindade@gmail.com"; $mail->Password = "jnt99971387"; $mail->From = "josenilsontrindade@gmail.com"; $mail->FromName = "System Tracker"; $mail->AddAddress($emailDestino); $mail->AddReplyTo($mail->From, $mail->FromName); $mail->Subject = "System Tracker - Alerta de Violacao de Perimetro"; $mail->Body = $msg; if (!$mail->Send()) { echo "Erro de envio: ". $mail->ErrorInfo; } else { echo "Mensagem enviada com sucesso!"; } } } } } } // if imei //final verifica geofence $dataBem = null; $dataCliente = null; $resBem = mysql_query("select id, cliente, envia_sms, name, alerta_hodometro, alerta_hodometro_saldo from bem where imei = '$imei'", $cnx); $dataBem = mysql_fetch_assoc($resBem); $resCliente = mysql_query("select id, celular, dt_ultm_sms, envia_sms, sms_acada, hour(timediff(now(), dt_ultm_sms)) horas, minute(timediff(now(), dt_ultm_sms)) minutos, nome from cliente where id = $dataBem[cliente]", $cnx); $dataCliente = mysql_fetch_assoc($resCliente); # Write it to the database... if ($gpsSignalIndicator != 'L') { $movimento = ''; if($speed > 0) $movimento = 'S'; else $movimento = 'N'; $gpsLat = gprsToGps($latitudeDecimalDegrees, $latitudeHemisphere); $gpsLon = gprsToGps($longitudeDecimalDegrees, $longitudeHemisphere); $gpsLatAnt = 0; $gpsLatHemAnt = ''; $gpsLonAnt = 0; $gpsLonHemAnt = ''; $alertaACadaSaldo = 0; $resLocAtual = mysql_query("select id, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere from loc_atual where imei = '$imei' limit 1", $cnx); $numRows = mysql_num_rows($resLocAtual); if($numRows == 0){ //mysql_query("insert into logs evento values ('ok') "); mysql_query("INSERT INTO loc_atual (date, imei, phone, satelliteFixStatus, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere, speed, infotext, gpsSignalIndicator, converte) VALUES (now(), '$imei', '$phone', '$satelliteFixStatus', '$latitudeDecimalDegrees', '$latitudeHemisphere', '$longitudeDecimalDegrees', '$longitudeHemisphere', '$speed', '$infotext', '$gpsSignalIndicator', 1)", $cnx); } else { mysql_query("UPDATE loc_atual set date = now(), phone = '$phone', satelliteFixStatus = '$satelliteFixStatus', latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', speed = '$speed', infotext = '$infotext', gpsSignalIndicator = '$gpsSignalIndicator' where imei = '$imei'", $cnx); } $distance = 0; try{ $bemId = $dataBem[id]; $countGeoDistance = mysql_query("select bem from geo_distance where bem = $bemId", $cnx); if($countGeoDistance === false || mysql_num_rows($countGeoDistance) == 0) { mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'I')", $cnx); mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'F')", $cnx); } /*envio de sms*/ if($dataCliente['envia_sms'] == 'S' && $dataBem['envia_sms'] == 'S' && !empty($dataCliente['celular']) && !empty($dataCliente['sms_acada'])){ if(empty($dataCliente['dt_ultm_sms'])){ mysql_query("update cliente set dt_ultm_sms = now() where id = $dataCliente[id]",$cnx); } else { $horas = $dataCliente['horas']; $minutos = $dataCliente['minutos']; if(!empty($horas)) $horas = $horas * 60; $tempoTotal = $horas+$minutos; if($tempoTotal > $dataCliente['sms_acada']){ $json = json_decode(file_get_contents("http://www.systemtracker.com.br\">www.systemtracker.com.br</a></p>"; $msg .= "</body>"; $msg .= "</html>"; $mail = new PHPMailer(); $mail->Mailer = "smtp"; $mail->IsHTML(true); $mail->CharSet = "utf-8"; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.gmail.com"; $mail->Port = "587"; $mail->SMTPAuth = "true"; $mail->Username = "josenilsontrindade@gmail.com"; $mail->Password = "jnt99971387"; $mail->From = "josenilsontrindade@gmail.com"; $mail->FromName = "System Tracker"; $mail->AddAddress($emailDestino); $mail->AddReplyTo($mail->From, $mail->FromName); $mail->Subject = "System Tracker - Alerta de Violacao de Perimetro"; $mail->Body = $msg; if (!$mail->Send()) { echo "Erro de envio: ". $mail->ErrorInfo; } else { echo "Mensagem enviada com sucesso!"; } } } } } } // if imei //final verifica geofence if($gpsSignalIndicator != 'L') { $movimento = ''; if($speed > 0) $movimento = 'S'; else $movimento = 'N'; $gpsLat = gprsToGps($latitudeDecimalDegrees, $latitudeHemisphere); $gpsLon = gprsToGps($longitudeDecimalDegrees, $longitudeHemisphere); $gpsLatAnt = 0; $gpsLatHemAnt = ''; $gpsLonAnt = 0; $gpsLonHemAnt = ''; $resLocAtual = mysql_query("select id from loc_atual where imei = '$imei' limit 1", $cnx); $numRows = mysql_num_rows($resLocAtual); if($numRows == 0){ mysql_query("INSERT INTO loc_atual (date, imei, phone, satelliteFixStatus, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere, speed, infotext, gpsSignalIndicator, converte) VALUES (now(), '$imei', '$phone', '$satelliteFixStatus', '$latitudeDecimalDegrees', '$latitudeHemisphere', '$longitudeDecimalDegrees', '$longitudeHemisphere', '$speed', '$infotext', '$gpsSignalIndicator', 1)", $cnx); } else { $dataLocAtual = mysql_fetch_assoc($resLocAtual); $gpsLatAnt = $dataLocAtual[latitudeDecimalDegrees]; $gpsLatHemAnt = $dataLocAtual[latitudeHemisphere]; $gpsLonAnt = $dataLocAtual[longitudeDecimalDegrees]; $gpsLonHemAnt = $dataLocAtual[longitudeHemisphere]; mysql_query("UPDATE loc_atual set date = now(), phone = '$phone', satelliteFixStatus = '$satelliteFixStatus', latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', speed = '$speed', infotext = '$infotext', gpsSignalIndicator = '$gpsSignalIndicator' where imei = '$imei'", $cnx); } $distance = 0; try{ $bemId = $dataBem[id]; $countGeoDistance = mysql_query("select bem from geo_distance where bem = $bemId", $cnx); if($countGeoDistance === false || mysql_num_rows($countGeoDistance) == 0) { mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'I')", $cnx); mysql_query("insert into geo_distance (bem, tipo) values($bemId, 'F')", $cnx); } /*envio de sms*/ if($dataCliente['envia_sms'] == 'S' && $dataBem['envia_sms'] == 'S' && !empty($dataCliente['celular']) && !empty($dataCliente['sms_acada'])){ if(empty($dataCliente['dt_ultm_sms'])){ mysql_query("update cliente set dt_ultm_sms = now() where id = $dataCliente[id]",$cnx); } else { $horas = $dataCliente['horas']; $minutos = $dataCliente['minutos']; if(!empty($horas)) $horas = $horas * 60; $tempoTotal = $horas+$minutos; if($tempoTotal > $dataCliente['sms_acada']){ $json = json_decode(file_get_contents("http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=$gpsLat,$gpsLon&language=es-ES")); if ( isset( $json->status ) && $json->status == 'OK' && isset($json->results[0]->formatted_address)) { $address = $json->results[0]->formatted_address; $address = utf8_decode($address); $aDataCliente = split(' ', $dataCliente['nome']); $msg = $texto_sms_localiza; $msg = str_replace("#CLIENTE", $aDataCliente[0], $msg); $msg = str_replace("#VEICULO", $dataBem['name'], $msg); $msg = str_replace("#LOCALIZACAO", $address, $msg); $msg = str_replace(' ', '+', $msg); sendSMS($dataCliente['celular'], $msg, ''); if($retorno < 0) mysql_query("insert into controle(texto) values('envio de sms retorno: $retorno')",$cnx); else mysql_query("update cliente set dt_ultm_sms = now() where id = $dataCliente[id]",$cnx); } } } } if($movimento == 'S'){ $resGeoDistance = mysql_query("select parou from geo_distance where bem = $bemId and tipo = 'I'", $cnx); $dataGeoDistance = mysql_fetch_assoc($resGeoDistance); if($dataGeoDistance[parou] == 'S' || empty($dataGeoDistance[parou])){ mysql_query("update geo_distance set latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', parou = 'N' where bem = $bemId and tipo = 'I'", $cnx); } } else { $resGeoDistance = mysql_query("select latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere from geo_distance where bem = $bemId and tipo = 'I'", $cnx); if(mysql_num_rows($resGeoDistance) > 0){ $update = mysql_query("update geo_distance set latitudeDecimalDegrees = '$latitudeDecimalDegrees', latitudeHemisphere = '$latitudeHemisphere', longitudeDecimalDegrees = '$longitudeDecimalDegrees', longitudeHemisphere = '$longitudeHemisphere', parou = 'S' where bem = $bemId and tipo = 'I'", $cnx); $dataGeoDistance = mysql_fetch_assoc($resGeoDistance); $gpsLatAnt = gprsToGps($dataGeoDistance[latitudeDecimalDegrees], $dataGeoDistance[latitudeHemisphere]); $gpsLonAnt = gprsToGps($dataGeoDistance[longitudeDecimalDegrees], $dataGeoDistance[longitudeHemisphere]); if($gpsLatAnt != $gpsLat) { if($gpsLatAnt != 0 && $gpsLonAnt != 0){ /* $json = json_decode(file_get_contents('http://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=$gpsLatAnt,$gpsLonAnt&wp.1=$gpsLat,$gpsLon&avoid=minimizeTolls&key=AqMJv19uaRKDbu-wSgUt3paCfXETZjBafVBMDXX9Rc4XyqmM6l4R_A8TgEXuWT6G')); if(isset($json->rows[0]->elements[0]->distance)){ } */ /* $json = json_decode(file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?sensor=false&origins=$gpsLatAnt,$gpsLonAnt&destinations=$gpsLat,$gpsLon")); if(isset($json->rows[0]->elements[0]->distance)){ $strDistance = $json->rows[0]->elements[0]->distance->value; $distance = $strDistance+0; $alertaACada = $dataBem['alerta_hodometro']; $alertaACadaSaldo = $dataBem['alerta_hodometro_saldo']; $alertaACadaSaldo = ($alertaACadaSaldo*1000) - $distance; if($alertaACadaSaldo <= 0 && $alertaACada > 0){ $msg = $texto_sms_alerta_hodometro; $msg = str_replace("#CLIENTE", $aDataCliente[0], $msg); $msg = str_replace("#VEICULO", $dataBem['name'], $msg); $msg = str_replace("#HODOMETRO", $alertaACada, $msg); $msg = str_replace(' ', '+', $msg); sendSMS($dataCliente['celular'], $msg, ''); $alertaACadaSaldo = $alertaACada; } $alertaACadaSaldo = (int)$alertaACadaSaldo/1000; } */ $geoDistance = distance($gpsLatAnt, $gpsLonAnt, $gpsLat, $gpsLon,'K'); //$strDistance = $json->rows[0]->elements[0]->distance->value; $distance = (int)($geoDistance*1000); $alertaACada = $dataBem['alerta_hodometro']; $alertaACadaSaldo = $dataBem['alerta_hodometro_saldo']; $alertaACadaSaldo = ($alertaACadaSaldo*1000) - $distance; if($alertaACadaSaldo <= 0 && $alertaACada > 0){ $msg = $texto_sms_alerta_hodometro; $msg = str_replace("#CLIENTE", $aDataCliente[0], $msg); $msg = str_replace("#VEICULO", $dataBem['name'], $msg); $msg = str_replace("#HODOMETRO", $alertaACada, $msg); $msg = str_replace(' ', '+', $msg); //sendSMS($dataCliente['celular'], $msg, ''); $alertaACadaSaldo = $alertaACada; } $alertaACadaSaldo = (int)$alertaACadaSaldo/1000; } } } } }catch(Exception $e){ mysql_query("INSERT INTO controle (texto) VALUES ($e->getMessage())", $cnx); } mysql_query("UPDATE bem set date = date, status_sinal = 'R', movimento = '$movimento', hodometro=hodometro+$distance WHERE imei = '$imei'", $cnx); mysql_query("INSERT INTO gprmc (date, imei, phone, satelliteFixStatus, latitudeDecimalDegrees, latitudeHemisphere, longitudeDecimalDegrees, longitudeHemisphere, speed, infotext, gpsSignalIndicator, km_rodado, converte) VALUES (now(), '$imei', '$phone', '$satelliteFixStatus', '$latitudeDecimalDegrees', '$latitudeHemisphere', '$longitudeDecimalDegrees', '$longitudeHemisphere', '$speed', '$infotext', '$gpsSignalIndicator', $distance, 1)", $cnx); } else { mysql_query("UPDATE bem set date = date, status_sinal = 'S' WHERE imei = '$imei'", $cnx); } # Now check to see if we need to send any alerts. if (trim($infotext) != "gprmc") { $res = mysql_query("SELECT responsible FROM bem WHERE imei='$imei'", $cnx); while($data = mysql_fetch_assoc($res)) { switch ($infotext) { case "dt": $body = "Disable Track OK"; break; case "et": $body = "Stop Alarm OK"; break; case "gt"; $body = "Move Alarm set OK"; break; case "help me": $body = "Help!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'SOS!')", $cnx); break; case "ht": $body = "Speed alarm set OK"; break; case "it": $body = "Timezone set OK"; break; case "low battery": $body = "Low battery!\nYou have about 2 minutes..."; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Bat. Fraca')", $cnx); break; case " bat:": $body = "Low battery!\nYou have about 2 minutes..."; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Bat. Fraca')", $cnx); break; case "Low batt": $body = "Low battery!\nYou have about 2 minutes..."; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Bat. Fraca')", $cnx); break; case "move": $body = "Move Alarm!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Movimento')", $cnx); break; case "nt": $body = "Returned to SMS mode OK"; break; case "speed": $body = "Speed alarm!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Velocidade')", $cnx); break; case "stockade": $body = "Geofence Violation!"; mysql_query("INSERT INTO message (imei, message) VALUES ('$imei', 'Cerca')", $cnx); break; } //switch //Enviando e-mail de alerta $headers = "From: $email_from" . "\r\n" . "Reply-To: $email_from" . "\r\n"; $responsible = $data['responsible']; $rv = mail($responsible, "Tracker - $imei", $body, $headers); } //while } } else { //GRPMC nao precisa reter a sessao } //No protocolo GPRMC cada nova conex�o � um IP. Enviando comando no fim da conexao, ap�s obter os dados. if (file_exists("$command_path/$conn_imei")) { $send_cmd = file_get_contents("$command_path/$conn_imei"); socket_send($socket, $send_cmd, strlen($send_cmd), 0); mysql_query("DELETE FROM command WHERE imei = $conn_imei"); unlink("$command_path/$conn_imei"); printLog($fh, "Comandos do Banco e Arquivo apagados: " . $send_cmd . " imei: " . $conn_imei); } mysql_close($cnx); break; } } //Checando se utilizou os dois protocolos para uma escuta if ($isGIMEI == true and $isGPRMC == true) { //printLog($fh, "ATENCAO: falha na obtencao do protocolo. Kill pid."); } $rec = ""; } //while } //fim interact /** * Become a daemon by forking and closing the parent */ function become_daemon() { GLOBAL $fh; //printLog($fh, "pcntl_fork() in"); $pid = pcntl_fork(); //printLog($fh, "pcntl_fork() out"); if ($pid == -1) { /* fork failed */ //printLog($fh, "fork failure!"); exit(); } elseif ($pid) { //printLog($fh, "pid: " . $pid); /* close the parent */ exit(); } else { /* child becomes our daemon */ posix_setsid(); chdir('/'); umask(0); return posix_getpid(); } //printLog($fh, "become_daemon() fim"); } function gprsToGps($cord, $hemisphere){ $novaCord = 0; strlen($cord) == 9 && $cord = '0'.$cord; $g = substr($cord,0,3); $d = substr($cord,3); $novaCord = $g + ($d/60); if($hemisphere == "S") $hemisphere == "S" && $novaCord = $novaCord * -1; if($hemisphere == "W") $hemisphere == "W" && $novaCord = $novaCord * -1; return $novaCord; } function sendSMS($contato, $mensagem, $remetente){ $cnx = mysql_connect("localhost", "user1", "pass1") or die("Could not connect: " . mysql_error()); mysql_select_db('tracker', $cnx); $res = mysql_query("select valor from preferencias where nome = 'url_sms'", $cnx); $data = mysql_fetch_assoc($res); $url = $data['valor']; $res = mysql_query("select valor from preferencias where nome = 'usuario_sms'", $cnx); $data = mysql_fetch_assoc($res); $usuario = $data['valor']; $res = mysql_query("select valor from preferencias where nome = 'senha_sms'", $cnx); $data = mysql_fetch_assoc($res); $senha = $data['valor']; $res = mysql_query("select valor from preferencias where nome = 'de_sms'", $cnx); $data = mysql_fetch_assoc($res); $de = $data['valor']; file_get_contents($url."usr=".$usuario."&pwd=".$senha."&number=55".$contato."&sender=".$de."&msg=$mensagem"); } function distance($lat1, $lon1, $lat2, $lon2) { $center_lat = $lat1; $center_lng = $lon1; $lat = $lat2; $lng = $lon2; $distance =( 6371 * acos((cos(deg2rad($center_lat)) ) * (cos(deg2rad($lat))) * (cos(deg2rad($lng) - deg2rad($center_lng)) )+ ((sin(deg2rad($center_lat))) * (sin(deg2rad($lat))))) ); return $distance; /* $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } */ } ?>
  9. Fala galera, estou aqui para pedir a ajuda de todos voces. Tudo que iremos tentar fazer é criar um chat privado utilizando websockets junto ao php sockets, para adiantar algumas coisas eu ja fiz um chat e disponibilizei no github, voces podem acessar atraves do link abaixo: Esse chat funciona perfeitamente, mas no entanto ele é um chat global, ou seja, uma mensagem enviada por um usuario X, vai para todos os usuarios que estão na sala do chat. Como dito anteriormente a nossa ideia é criar um chat privado, então vamos a algumas considerações: No meu caso estou utilizando os arquivos dentro da pasta easychat (que esta no link enviado anteriormente) Podemos utilizar node.js, socket.io e afins? Não, estou querendo resolver somente com php e javascript puro. Agora chegou a hora de dar uma pincelada no meu codigo: Aplicacao.js Existem duas funções responsaveis por enviar e receber a mensagem do servidor e abaixo estão elas: form.onsubmit = function(e) { e.preventDefault(); // Recuperando a mensagem do textarea. var mensagem = mensagemTexto.value; // Enviando a mensagem através do WebSocket. socket.send(mensagem); // Adicionando a mensagem numa lista de mensagens enviadas. listaMensagem.innerHTML += '<li class="envia"><span>Enviado:</span>' + mensagem + '</li>'; // Limpando o campo da mensagem após o envio. mensagemTexto.value = ''; return false; }; socket.onmessage = function(event) { var mensagem = event.data; listaMensagem.innerHTML += '<li class="recebida"><span>Recebida:</span>' + mensagem + '</li>'; }; Quando enviamos uma mensagem ele executa o comando socket.send(mensagem) ali eu pensei em enviar mais alguns parametros como: IP do usuario (Pode precisar) Chat de onde ele esta acessando (Chat1, Chat2, Chat3) Mensagem (é claro rs) Já no lado do PHP, o comando abaixo é responsavel por pegar a resposta do usuario e retorna-la de volta: Server.php }else{ $bytes = socket_recv($sock, $data, 2048, null); $d = unmask($data); foreach ($cls as $socket) { if($socket != $m_sock && $val > 0){ try{ socket_write($socket,(encode($d))); }catch(Exception $e){ unset($cls[$socket]); socket_close($cls[$socket]); } } } } } Com o comando socket_recv ele consegue captar a mensagem que esta sendo enviada e realiza a função unmask nela, um pouco mais adiante ele faz o encode desta mensagem que recebeu e envia de volta para aquele socket (e todos que estão conectados naquele socket recebem a mensagem). Nesse caso, como nosso chat é privada devemos pensar tambem em fazer o insert e em seguida um select no banco de dados, entao melhor maneira de fazer isso é inserindo esses comandos entre os codigos try e socket_write, então vamos aos testes: ...... try{ //Aqui estabilizamos uma conexão com o banco de dados e inserimos na tabela a mensagem + ip + data + Chat1 (ou 2 ou 3). socket_write($socket,(encode($d))); } ..... Acho que tambem seria melhor criar um campo no banco de dados para verificar se a mensagem foi visualizada ou não? Depois que inserimos no banco de dados chegou a hora do puzzle: Como iremos fazer para retornar a mensagem para aquele determinado usuario? Antes de respondermos a esta pergunta vamos criar um cenario novo e de simples visualização para todos nos: Vamos criar um arquivo php com 2 links: Ir para o Chat 1 & Ir para o Chat 2 Vamos reaproveitar aqueles arquivos dentro da pasta EasyChat Vamos duplicar o arquivo index.php, criando indexChat1.php e IndexChat2.php Ambos os indexs irão utilizar a porta 8080 (assim como esta no github), Não! nos não iremos separar os chats em portas diferentes (tenha em mente que isso é so um teste para realizar algo mais completo lá na frente, IMAGINE 10000 chats privados acontecendo simultaneamente e abrimos uma porta para cada um deles......). Entao apartir deste momento temos 2 indexes diferentes utilizando os mesmos arquivos: aplicacao.js e server.php, no caso do arquivo aplicacao.js ele envia valores diferentes para o socket php como ip, mensagem e o tipo de chat que ele esta inserido, como chat1 ou chat 2. Executandos os Testes OK, vamos abrir o arquivo indexChat1.php em uma aba, e indexChat2.php em outra aba do nosso navegador, vamos inicialmente escrever uma mensagem no chat1, quando fizermos isso (e do jeito que nosso codigo atualmente esta), a mensagem será recebida tambem na aba do chat2, e a mesma coisa aconteceria caso digitarmos algo no chat2. Mas pelo menos no banco de dados esta dá seguinte forma: ID = 0 IP = 32.22.221.22 Local = Chat1 Mensagem = Olá mundo Data = 01/01/2016 Visualizado = false Agora voltamos a seguinte pergunta: Como iremos fazer para os usuarios que estão no chat1, nao receber e nem enviar mensagens para os usuarios que estão no chat2 e virce-versa? Eu acredito que a resposta esta na criação de um codigo que ainda nao sabemos mas que deve ser colocado dentro do arquivo server.php mais especificamente entre os comandos try e socket_write. Alguem tem mais alguma ideia para contribuir, assim que vou avançando postarei algumas soluções neste post ;)
×

Important Information

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