Ir para conteúdo
Fórum Script Brasil
  • 0

Socket Client: Retorno do servidor


felipe_azv

Pergunta

Olá pessoal.

Estou montando uma aplicação que requer a utilização de sockets.

Montei o socket server em Java. No caso do client eu estou pretendendo montar, na verdade, não em perl e sem em PerlScript (na web).

(espero que aqui seria a área correta para postar essa dúvida :blink: ).

Bom, o meu socket server está funcionanado corretamente e o socket client está enviando a informação de acordo com o esperado, porém, como eu estou dando os primeiros passos com programação Perl/PerlScript, não faço idéia de como pegar o retorno enviado pelo socket server :S.

Alguém saberia como fazê-lo?

Aqui está meu socket cliente (estou usando o IIS 6+ ActivePerl para rodá-lo numa aplicação em ASP e aparentemente está tudo certo).

# Client Program

use IO::Socket::INET;

# Create a new socket

$MySocket=new IO::Socket::INET->new(PeerPort=>7000,Proto=>'tcp',PeerAddr=>'192.168.0.178');

# Send messages

my $msg = "Mensagem do Client Socket para o Server Socket";

#my $returnmsg = AQUI PRECISO PEGAR O RETORNO DO SOCKET SERVER

if($msg ne '') {

if($MySocket->send($msg)) {

$Response->Write("retorno socket server");

}

}

caso queiram ver o código java o server socket:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Servidor {

public static void main(String[] args) {

ServerSocket server_socket = null;

Socket client_socket = null;

//Declaro o leitor para a entrada e saida de dados

BufferedReader in = null;

PrintWriter out = null;

try {

//Cria o ServerSocket na porta 7000 se estiver disponível

server_socket = new ServerSocket(7000);

//Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente

client_socket = server_socket.accept();

//Cria um BufferedReader para o canal da stream de entrada de dados do socket client_socket

in = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));

out = new PrintWriter(client_socket.getOutputStream(), true);

// >>Descomentar a linha abaixo para enviar para o client socket!

//out.println("Mensagem do Servidor para o Cliente");

//Aguarda por algum dado e imprime a linha recebida quando recebe

System.out.println(in.readLine());

//trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io

} catch (IOException e) {

//Imprime uma notificação na saída padrão caso haja algo errado.

System.out.println("Algum problema ocorreu para criar ou receber o socket.");

} finally {

try {

//Encerro o socket de comunicação

client_socket.close();

//Encerro o ServerSocket

server_socket.close();

} catch (IOException e) {

}

}

}

}

Obrigado!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Olá pessoal.

Estou montando uma aplicação que requer a utilização de sockets.

Montei o socket server em Java. No caso do client eu estou pretendendo montar, na verdade, não em perl e sem em PerlScript (na web).

(espero que aqui seria a área correta para postar essa dúvida :blink: ).

Bom, o meu socket server está funcionanado corretamente e o socket client está enviando a informação de acordo com o esperado, porém, como eu estou dando os primeiros passos com programação Perl/PerlScript, não faço idéia de como pegar o retorno enviado pelo socket server :S.

Alguém saberia como fazê-lo?

Aqui está meu socket cliente (estou usando o IIS 6+ ActivePerl para rodá-lo numa aplicação em ASP e aparentemente está tudo certo).

# Client Program
    use IO::Socket::INET;

    # Create a new socket
    $MySocket=new IO::Socket::INET->new(PeerPort=>7000,Proto=>'tcp',PeerAddr=>'192.168.0.178');

    # Send messages

    my $msg = "Mensagem do Client Socket para o Server Socket";
    #my $returnmsg = AQUI PRECISO PEGAR O RETORNO DO SOCKET SERVER

    if($msg ne '') {
        if($MySocket->send($msg)) {
            $Response->Write("retorno socket server");
        }
    }

        caso queiram ver o código java o server socket:
       

       import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

    public static void main(String[] args) {

        ServerSocket server_socket = null;
        Socket client_socket = null;
        //Declaro o leitor para a entrada e saida de dados
        BufferedReader in = null;
        PrintWriter out = null;

        try {

            //Cria o ServerSocket na porta 7000 se estiver disponível
            server_socket = new ServerSocket(7000);

            //Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
            client_socket = server_socket.accept();

            //Cria um BufferedReader para o canal da stream de entrada de dados do socket client_socket
            in = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
            out = new PrintWriter(client_socket.getOutputStream(), true);
            
            // >>Descomentar a linha abaixo para enviar para o client socket!
            //out.println("Mensagem do Servidor para o Cliente"); 

            //Aguarda por algum dado e imprime a linha recebida quando recebe
            System.out.println(in.readLine());

        //trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io
        } catch (IOException e) {

            //Imprime uma notificação na saída padrão caso haja algo errado.
            System.out.println("Algum problema ocorreu para criar ou receber o socket.");

        } finally {

            try {

                //Encerro o socket de comunicação
                client_socket.close();
                //Encerro o ServerSocket
                server_socket.close();

            } catch (IOException e) {
            }
        }
    }
}



Obrigado![/quote]


depois de dar uma pesquisada eu consegui resolver meu problema.

pra quem quiser, aqui está o código que montei pra montar um client socket em perl pegar um retorno do servidor:

#!/usr/local/bin/perl
# file: tcp_echo_cli1.pl
# usage: tcp_echo_cli1.pl [host] [port]
# Echo client, TCP version


use Socket;
use IO::Handle;
my ($bytes_out,$bytes_in) = (0,0);

my $host = '192.168.0.178';
my $port = '7000'; 
my $protocol = 'tcp';
my $msg_out = "Mensagem do cliente para o servidor!";

$host = inet_aton($host) or
    die "$host: unknown host";

socket(SOCK, AF_INET, SOCK_STREAM, $protocol) or
    die "socket() failed: $!";
my $dest_addr = sockaddr_in($port,$host);
connect(SOCK,$dest_addr) or
    die "connect() failed: $!";

SOCK->autoflush(1);

$Response->Write("Enviando mensagem para o servidor:  <b>$msg_out</b>");
print SOCK $msg_out;

my $msg_in = <SOCK>;
$Response->Write("<br/>MENSAGEM do Servidor: <b>$msg_in</b>");

close SOCK;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...